当调用子类的析构函数时,是否也会调用父类的析构函数?

时间:2012-09-08 23:32:28

标签: c++

  

可能重复:
  Do I need to explicitly call the base virtual destructor?

假设您有以下内容:

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

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

将调用哪些析构函数?是否会调用父母和孩子的析构函数?目前我的计算机上没有设置C ++编译器。

2 个答案:

答案 0 :(得分:3)

如果ChildClass派生自ParentClass,则首先调用派生的析构函数,然后调用父类。正如代码所示,ChildClass不会继承ParentClass

答案 1 :(得分:1)

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