C++ unique_ptr and polymorphism
本问题已经有最佳答案,请猛点这里访问。
也许有同样的问题,但我没有找到。
我有以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class MBase { public: ~MBase() { cout <<"Base destructor " << endl; } }; class MF: public MBase { public: ~MF() { cout <<"MF Destructor" << endl; } }; class MS: public MBase { public: ~MS() { cout <<"MS Destructor" << endl;} }; int main() { unique_ptr<MBase> ptr1 = unique_ptr<MF>(new MF()); unique_ptr<MBase> ptr2 = unique_ptr<MS>(new MS()); return 0; } |
还有输出
1 2 3 | Base destructor Base destructor |
对不对?为什么不调用派生析构函数?我要做什么来解决这个问题?
C++中的多态性需要虚拟析构函数,这样就有可能删除实例。通过指向基类对象的指针的派生类。
长话短说-allways声明析构函数virtual if类应该派生自。
何时使用虚拟析构函数?
在C++中使用多态性和继承时,应该有一个虚析构函数。