• 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
Copyright © 2020-2023  润新知