记住下面规则即可:
- 全局对象先于局部对象进行构造
- 局部对象按照出现的顺序进行构造,
- 无论是否为static析构的顺序按照构造的相反顺序析构
- 但要注意static改变对象的生存作用域之后,会放在局部 对象之后进行析构
由上可知,析构顺序和构造顺序不一定是相反的(有static成员时)
例题:
设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?( )
C c;
int main()
{
A a;
B b;
static D d;
return 0;
}
A.D B A C
B.B A D C
C.C D B A
D.A B D C
答案解析
分析:1、类的析构函数调用一般按照构造函数调用的相反顺序进行调用,但是要注意static对象的存在, 因为static改变了对象的生存作用域,需要等待程序结束时才会析构释放对象
2、全局对象先于局部对象进行构造
3、局部对象按照出现的顺序进行构造,无论是否为static
4、所以构造的顺序为 c a b d
5、析构的顺序按照构造的相反顺序析构,只需注意static改变对象的生存作用域之后,会放在局部 对象之后进行析构
6、因此析构顺序为B A D C