C ++ unique_ptr和多态

时间:2014-10-24 14:44:06

标签: c++ polymorphism unique-ptr

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

我有以下代码:

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

不是吗?为什么派生的析构函数不被称为?我需要做些什么才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

C ++中的多态性需要虚拟析构函数,因此可以删除实例 通过指向基类对象的指针获取派生类。

长话短说 - 如果应该派生类,那么总是声明析构函数是虚拟的。

When to use virtual destructors?