effective c++ 条款4:确定对象被使用前已先被初始化
作者:互联网
-
确保每一个构造函数都将对象的每一个成员初始化
-
使用member initialization list 替换 assignment:
- 总是在初值列中列出所有成员变量
- base classes比derived classes更早初始化,而class的成员变量总以其声明次序被初始化,即使他们在成员初值列中以不同次序出现,也不会有任何影响
//assignment class tmp { private: int age; double name; public: tmp( const int _age, const double _name) { age = _age name = _name; } } //member initialization list class tmp { private: int age; double name; public: tmp( const int _age, const double _name) : age(_age), name(_name){} }
-
对定义于不同编译单元(产出单一目标文件的源码)内的non-local static对象的初始化序列无明确定义
- 问题:某编译单元内的某个non-local static对象的初始化动作使用了另一编译单元内的某个non-local static对象,而所用的对象可能尚未被初始化
- 解决:将每个non-local static对象转至自己的专属函数内且声明为static,函数则返回reference指向它所含的对象
-
please remember:
- 为内置型对象进行手工初始化
- 构造函数最好使用member initialization list。初值列列出的成员变量,其排序次序和他们在class中的声明次序相同
- 以local static对象替换non-local static对象
标签:初始化,name,effective,对象,age,c++,static,local 来源: https://www.cnblogs.com/chenglixue/p/16387466.html