2

可能重复:
我是否需要显式调用基本虚拟析构函数?

假设您有以下内容:

class ParentClass {
    ...
    virtual ~ParentClass();

class ChildClass {
    ...
    virtual ~ChildClass();

哪个析构函数会被调用?父母和孩子的析构函数都会被调用吗?目前没有在我的计算机上设置 C++ 编译器。

4

2 回答 2

3

如果ChildClass是从派生的,ParentClass那么首先调用派生的析构函数,然后是父类。正如它在您的代码中所代表的那样,ChildClass不继承自ParentClass

于 2012-09-08T23:36:02.080 回答
1

是的,两个构造函数都被调用:构造和销毁是对称的:所有子对象都以与创建它们的顺序完全相反的顺序被销毁。对于破坏顺序,析构函数是否为虚拟无关紧要。虚拟析构函数与非虚拟析构函数的唯一影响是当delete使用指向基的指针 ing 驱动类型的对象时:如果基的析构函数不是虚拟的,这将导致未定义的行为。

于 2012-09-08T23:38:53.083 回答