全局对象和函数内静态对象调用构造析构函数差异

全局对象的构造函数将在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<<"insidemain()"<<endl;

f();

cout<<"leaving main()"<<endl;

}

OUTPUT:

Obj::Obj()for A

insidemain()

Obj::Obj()for B

leaving main()

Obj::~Obj() for B //在A前析构

Obj::~Obj() forA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值