函数体内部的静态对象

1.函数体内部的静态对象
用户自定义的静态变量同一般的静态对象的规则是一样的, 而且它同样也必须有初始化操作。
但是,零赋值只对预定义类型有效,用户自定义类型必须用构造函数来初始化。因此,如果我们
在定义一个静态对象时没有指定构造函数参数,这个类就必须有缺省的构造函数。

2 静态对象的析构函数
静态对象的析构函数(包括静态存储的所有对象,不仅仅是上例中的局部静态变量)在程序从main() 块中退出时,或者标准的C库函数e x i t ( )被调用时才被调用。多数情况下m a i n ( )函数的结尾也是调用e x i t ( )来结束程序的。这意味着在析构函数内部使用 e x i t ( )是很危险的,因为这可能陷入一个死循环中。但如果用标准的 C库函数a b o r t ( )来退出程序,静态对象的析构函数并不会被调用。
我们可以用标准C库函数a t e x i t ( )来指定当程序跳出m a i n ( )(或调用e x i t ( ))时应执行的操作。
在这种情况下,在跳出m a i n ( )或调用e x i t ( )之前,用a t e x i t ( )注册的函数可以在所有对象的析构函数之前被调用。
静态对象的销毁是按它们初始化时相反的顺序进行的。当然只有那些已经被创建的对象才会被销毁。幸运的是,编程系统会记录对象初始化的顺序和那些已被创建的对象。全局对象总是在m a i n ( )执行之前被创建了,所以最后一条语句只对函数局部的静态对象起作用。如果一个包含静态对象的函数从未被调用过,那么这个对象的构造函数也就不会执行,这样自然也不会执行析构函数。

3.在C + +中,全局静态对象的构造函数是在 m a i n ( )之前调用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值