C++UNQuYK-PTR和多态性

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++中使用多态性和继承时,应该有一个虚析构函数。