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 对象。   

 

原文地址:https://www.cnblogs.com/zhuxuekui/p/3914626.html