1、执行析构函数的函数体;
2、如果该类中拥有类对象成员,且类对象有析构函数,则以类对象成员声明次序的相反顺序调用其析构函数,销毁类对象成员;
3、按原来构造顺序的相反顶序向上依次调用基类的析构函数。
程序示例:
#include
using namespace std;
class AA{
char c;
public:AA(char ch):c(ch){ cout< cout<<"a"; }
};
class BB{AA m1;AA m2;
public:BB():m2('p'),m1('q'){ cout<<"B";}~BB(){ cout<< "b"; }
};int main(){
BB bb;
return O;}
【解析】:
示例二:
有如下类声明:
class Base1{ };
class Base2{ };
class Derived: public Base2,public Base1{};
在一个Derived 对象消亡时,析构函数被调用的顺序是()。
【解析】:
C++中,派生类构造函数都是先调用基类构造函数,再根据声明次序定义数据成员
,另外对于多继承, 派生类的构造函数初始化列表中,基类构造函数是按照基类在派生类的派生列表中出现的次序调用的; 而析构函数是按构造函数运行顺序的逆序进行调用的
,可知题目中析构函数的调用顺序为: 派生类Derived的析构函数,Base1的析构函数,Base2的析构函数; 答案为A。