码迷,mamicode.com
首页 > 其他好文 > 详细

NO.4: 确定对象被使用前已被初始化

时间:2017-07-30 00:08:52      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:单元   cti   不同   列表   声明变量   c++   隐式   手工   style   

1.为内置对象进行 "手工初始化",因为C++不保证初始化他们(内置类型在赋值与初始化销毁基本相同,最好还是进行初始化列表),在内置类型过多情况下,可选择private函数统一初始化(赋值与初始化效率持平)

2.构造函数最好使用成员初始化列表方式,构造函数体内属于赋值操作,且初始化列表最好与声明变量次序保持一致(成员变量实际初始化次序与声明次序一致)

3.为免除 "跨编译单元之初始化次序"问题,请以 "local-static" 对象替换 "non-local-static"(即单例模式(singleton));

编译单元:指产出单一目标文件,包括 源码和头文件,所以这涉及2个源码文件了

non-local-static:位于global对象,或者匿名namespace作用域,class内,file内都称为non-local-static,而函数内的称为local-static(stack/heap-based 除外);

Total : 2个不同的编译单元内各含有自己的non-local-static变量,且其中一个static变量需要另一个static变量,它所用到的static可能未完成初始化,C++不保证 "不同编译单元定义的non-local-static" 初始化次序无明确定义.

解决办法: 使用函数内local-static定义,因为C++保证函数内的"local-static"对象,会在 "该函数调用期间" “首次遇到该对象定义式” 时初始化;

 

拓展:多个编译单元的 "non-local-static" 对象经由 "模板隐式具现化" 形成!

 

 1 //Effective C++ NO.4
 2 
 3 
 4 class Demo
 5 {
 6 public:
 7     Demo(){};
 8     
 9     Demo& SingleMode()
10     {
11         static Demo Demo_static;
12         return Demo_static;
13     }
14 };

 

NO.4: 确定对象被使用前已被初始化

标签:单元   cti   不同   列表   声明变量   c++   隐式   手工   style   

原文地址:http://www.cnblogs.com/xuaidongstdudyrecording/p/7257871.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!