[C++再学习系列] 全局或静态变量(对象)的初始化

  1. 云栖社区>
  2. 博客>
  3. 正文

[C++再学习系列] 全局或静态变量(对象)的初始化

技术小美 2017-11-05 02:16:00 浏览728
展开阅读全文

  对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的;如果初始化,那么初始化发生在任何代码执行之前,属于编译期初始化。由于内置变量无须资源释放操作,仅需要回收内存空间,因此程序结束后全局内存空间被一起回收,不存在变量依赖问题,没有任何代码会再被执行!

  C++引入了对象,这给全局变量的管理带领新的麻烦。C++的对象必须有构造函数生成,并最终执行析构操作。由于构造和析构并非分配内存那么简单,可以相当复杂,因此何时执行全局或静态对象(C++)的构造和析构呢?这需要执行相关代码,无法在编译期完成,因此C++标准规定:全局或静态对象当且仅当对象首次用到时才进行构造,并通过atexit()来管理对象的生命期,在程序结束之后(如调用exit,main),按FILO顺序调用相应的析构操作!

  注:红色标记部分有问题,采用G++ 3.5 编译的结果是:全局变量和文件域的静态变量都将在main开始之前被初始化;只有函数内的局部静态变量才是在第一次使用才初始化的。其他编译器未验证。



本文转自 zhenjing 博客园博客,原文链接:http://www.cnblogs.com/zhenjing/archive/2010/10/15/1852116.html   ,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小美
+ 关注