Effective C++ 条款四 确定对象被使用前已被初始化
1、对于某些array不保证其内容被初始化,而vector(来自STL)却有此保证。
2、永远在使用对象前初始化。对于无任何成员的内置类型,必须手工完成。
int x = 0;
const int * p = &x;
3、不要混淆赋值与初始化的区别。一般初始化在定义的时候一起进行。而赋值是在定义之后的动作。
比如说在某一个类中的构造函数中,函数的行为都是赋值操作,而非初始化操作。
一般来说,对象的成员变量的初始化动作发生在进入构造函数本体之前。所以,我们一般写在构造函数初始化列表中进行初始 化。类似与const成员变量的初始化。
a(const string &name,string &addtress):thename(name),theaddress(addtress){} ,不要忘记大括号。
4、对于某些内置类型的成员变量,如果是const 与 reference修饰,必须要初始化。所以,我们应该在构造函数初始化列表中进行全部实例变量的初始化动作。
对于有多个构造函数的类,我们可以将一些赋值操作放在一个函数中进行,然后在所有构造函数中调用此函数。
对于成员初始化的次序,一般都是先基类,然后是以声明的次序初始化。
记住:
1、为内置类型对象进行手工初始化,因为C++并不保证初始化他们。
2、构造函数最好时候初始化列表,而不要在构造函数体内使用赋值操作,在初始化列表中初始化的成员变量,其排列次序应该和他们在类中声明的次序一致。
3、为避免“跨编译单元之初始化次序”问题,请以local static 对象替换non-local static 对象。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。