zoukankan      html  css  js  c++  java
  • 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 对象。   

     

  • 相关阅读:
    android平台从froyo 2.2开始支持jni单步调试
    Ubuntu java 环境变量
    ubuntu 10.04安装sunjava5jdk
    proc文件系统usb部分信息输出
    Linux lftp乱码解决及使用书签的方法
    用find & grep查找文件内容
    ubuntu10.10 下安装android 2.2开发环境
    VIM复制粘贴大全!
    kinect 无法在我的android开发板上显示的分析
    hdu 1087 Super Jumping! Jumping! Jumping!
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3914626.html
Copyright © 2011-2022 走看看