C++中是不允许virtual 构造函数的如果在构造函数前加virtual 以vc为例编译器报错为inline is the only legal storage class for constructors 虽然不明白这个跟inline有什么关系但是错误是肯定的 构造函数和析构函数都可以是private的这种情况下编译通过但是该类无法被实例化即使继承也不行 例如 class A { private: A(); virtual ~A(); }; class B : public A { public: B(); virtual ~B(); }; B b; 以上代码是编译不通过的因为B() ~B()分别需要调用A()~A()而它们都是private的 所以无法调用 解决方法只有friend包括friend class和 friend function例如可以将A的定义修改如下就可以实现 class A { private: A(); virtual ~A(); friend class B; }; 或者friend函数也可以在内部生成A的变量因为它可以调用A的私有构造函数和析构函数 |