ptr和多态性

C++ unique_ptr and polymorphism

本文关键字:多态性 ptr      更新时间:2023-10-16

也许还有同样的问题,但我没有找到。

我有以下代码:

class MBase {
    public:
        ~MBase() { cout << "Base destructorn" << 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

对不对?为什么没有调用派生的析构函数?我该怎么办才能解决这个问题?

C++中的多态性需要虚拟析构函数,因此可以删除实例的派生类。

长话短说-如果类应该派生自,那么所有方法都声明析构函数为虚拟的。

何时使用虚拟析构函数?

在C++中使用多态性和继承时,应该有一个虚拟析构函数