全局对象的构造函数将在main函数之前运行。析构在main函数之后运行。
函数内部的static对象的构造函数将在第一次调用该函数时调用,main函数结束之后执行。但其析构会在全局对象之前,因为所有对象的析构顺序和构造顺序相反,即全局对象在函数内部的static对象前构造,在后面析构。若包含静态局部对象的函数未被调用,则也不进行析构。
可以通过atexit函数指定当离开main或者调用exit时所要执行的动作。其在所有的析构函数之前运行。
class Obj
{
char cT;
public:
Obj(char c)
{
cT=c;
cout<<"Obj::Obj() for "<<c<<endl;
}
~Obj()
{
cout<<"Obj::~Obj() for "<<cT<<endl;
}
};
Obj A('A'); //全局对象在main之前构造
void f()
{
static Obj B('B');
}
void main()
{
cout<<"inside main()"<<endl;
f();
cout<<"leaving main()"<<endl;
}
OUTPUT:
Obj::Obj() for A
inside main()
Obj::Obj() for B
leaving main()
Obj::~Obj() for B //在A前析构
Obj::~Obj() for A