也许有同样的问题,但我还没找到。
我有以下代码:
class MBase {
public:
~MBase() { cout << "Base destructor\n" << 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;
}
还有输出
Base destructor
Base destructor
不是吗?为什么派生的析构函数不被称为?我需要做些什么才能解决这个问题?
答案 0 :(得分:0)
在C ++中使用多态和继承时,你应该有一个虚析构函数
答案 1 :(得分:0)
C ++中的多态性需要虚拟析构函数,因此可以删除实例 通过指向基类对象的指针获取派生类。
长话短说 - 如果应该派生类,那么总是声明析构函数是虚拟的。