可能重复:
Do I need to explicitly call the base virtual destructor?
假设您有以下内容:
class ParentClass {
...
virtual ~ParentClass();
和
class ChildClass {
...
virtual ~ChildClass();
将调用哪些析构函数?是否会调用父母和孩子的析构函数?目前我的计算机上没有设置C ++编译器。
答案 0 :(得分:3)
如果ChildClass
派生自ParentClass
,则首先调用派生的析构函数,然后调用父类。正如代码所示,ChildClass
不会继承ParentClass
答案 1 :(得分:1)
是的,两个构造函数都是调用:构造和破坏是对称的:所有子对象都以与创建它们完全相反的顺序被销毁。对于破坏的顺序,析构函数是否为虚拟无关紧要。虚拟析构函数与非虚拟析构函数的唯一影响是使用指向基类的指针delete
一个dreived类型的对象:如果基类的析构函数不是虚拟的,则会导致未定义的行为。