先构造的一定后析构么,后构造一定先析构么?
首先要看一个
/*
设已经有A,B,C,D 4个类的定义,程序中A,B,C,D 析构函数调用顺序
*/
C c;
void main () {
A* pa = new A ();
B b;
static D d;
delete pa;
}
ABCD都是类,所以我们要看一下他们析构和构造的顺序。
首先构造的是 C
因为他是全局变量。
接着就是 A B D
析构的顺序有点不一样了,由于A是通过new出来的,所以遇到delete就会调用析构函数。
首先析构的是A
之后是B,为什么不是D呢,由于D是静态的,他只会在main函数结束,或者是遇到exit函数的时候调用析构函数
最后就是C了
构造顺序是 CABD
析构顺序是 ABDC
总结一下 :
1)定义的全局对象,他的构造函数在所有的函数(包括main)执行之前调用,当main执行完毕,或执行exit函数时,才调用析构函数。
2)如果调用的是局部自动对象(new),则建立对象时调用构造函数,在函数调用结束,对象释放(delete)调用析构函数
3)如果在函数中调用静态(static)局部对象,则在程序中第一次调用此函数建立对象时调用构造函数一次,函数调用结束时,对象并不释放,也不调用析构函数,只在main函数或滴啊用exit函数结束时,才调用析构函数。