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 ( )之前调用的