面试题答案
一键面试- 调用顺序:
- 首先调用
C
的析构函数,输出C destructor
。 - 接着调用
B
的析构函数,输出B destructor
。 - 最后调用
A
的析构函数,输出A destructor
。
- 首先调用
- 原理:
- 在C++中,当通过基类指针删除派生类对象(如
C* obj = new C(); delete obj;
,这里通过delete
操作符,使用基类指针obj
删除派生类C
的对象)时,若基类的析构函数为虚函数,会发生动态绑定。 - 析构函数的调用顺序是从最派生类(这里是
C
)开始,逐步向上调用其基类的析构函数。这是因为最派生类对象包含了其所有基类子对象,先析构最派生类可以释放其特有的资源,然后再依次析构基类子对象,释放基类相关的资源,从而保证整个对象的正确销毁。所以先调用C
的析构函数,然后按照继承顺序(先A
后B
),依次调用B
和A
的析构函数。
- 在C++中,当通过基类指针删除派生类对象(如