条款4:确定对象被使用前已先被初始化 记住: ★为内置对象进行手工初始化,因为C++不保证初始他们 ★构造函数最好使用初始化列表,而不要在构造函数本体内使用赋值操作.初始化列表列出的成员变量,其排列次序应和它们在class中的声明次序相同 ★为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象 -------------------------------------------------------------------------…
成员初始化 在c和c++ 中,使用为初始化的类型经常会引发不可预料的错误,从而使得我们要花费巨大的时间用于调试查找问题,所以确定对象被使用前已被初始化是个非常好的习惯. 永远在使用之前对对象进行初始化.对于无不论什么成员的内置类型,你必须手工完毕初始化操作.由于c++不保证初始化他们. 内置类型意外的其它东西,初始化责任落在构造函数身上.但要注意区分构造函数中的变量是赋值还是初始化. 举个样例 class PhoneNumber{...}; class ABEntry{ public: ABEn…
为内置型对象进行手工初始化,因为C++不保证初始化它们. 构造函数最好使用成员初值列,而不要在构造函数本体内使用赋值操作.初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同. 为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象.…
在确保对象在使用前已先被初始化这一条款的编码实践中,作者为我们总结了三条经验,它们分别是: ------------------------------------------------------------------------------------------------------- ⅰ. 手工初始化内置类型对象 ⅱ. 构造函数最好使用成员初值列,而不要在构造函数内使用赋值操作,其排列次序应和他们在类中声明的次序相同 ⅲ. 用local static对象替换non-local st…
Effective C++ Chapter 1. 让自己习惯C++ (Accustoming Yourself to C++) Item 4. 确定对象被使用前已先被初始化 (Make sure that objects are initialized before they're used.) 通常如果你使用 C part of C++ 而且初始化可能招致运行期成本,那么就不保证发生初始化.一旦进入 non-C part of C++, 规则有些变化.这就很好地解释了为什么 array (来自…
不要混淆赋值和初始化,对于大多数类型而言,比起先调用默认构造函数然后调用赋值操作符,只调用一次拷贝构造函数是高效的 对于内置类型,也需要成员初值列(member initialization list)来初始化,对于const和reference,则是必须的 基类先于子类先初始化,class的成员变量初始化的顺序是以其声明的次序被初始化 不同编译单元内定义的non-local static对象 static对象包括global对象,定义于namespace,class,函数以及file作用域被声…
一.为内置类型对象进行手工初始化,因为C++不保证初始化它们. 二.对象初始化数据成员是在进入构造函数用户编写代码前完成,要想对数据成员指定初始化值,那就必须使用初始化列表. class A { public: A(const string &str) { m_str = str; //m_str 的初始化是在进入构造函数中用户自定义编写代码前完成的,所以这里的m_str = str,执行的不是初始化,而是赋值 } private: string m_str; }; 在数据成员的默认初始化,然后…
1.对于某些array不保证其内容被初始化,而vector(来自STL)却有此保证. 2.永远在使用对象前初始化.对于无任何成员的内置类型,必须手工完成.      int x = 0;      const int * p = &x; 3.不要混淆赋值与初始化的区别.一般初始化在定义的时候一起进行.而赋值是在定义之后的动作.      比如说在某一个类中的构造函数中,函数的行为都是赋值操作,而非初始化操作.      一般来说,对象的成员变量的初始化动作发生在进入构造函数本体之前.所以,我们一…
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 读取未初始化的值会导致不确定的行为.在某些平台上,仅仅只是读取为初始化的值,就有可能让你的程序终止运行.更可能的情况是读入一些“半随机”bits,污染了正在进行读取的那个对象,最终导致不可测知的程序行为,以及令人不愉快的调试过程. 提出最佳准则:永远在使用对象之前将它初始化.分为两部分:对于无任何成员的内置类型,你必须手工完成此事:至于内置类型以外的其他任何东西…
危害:读取未初始化的值会导致不明确甚至是半随机化的行为. 最佳处理办法:永远在使用对象之前先将它初始化:确保每一个构造函数都将对象的每一个成员初始化. 1 注意区分赋值和初始化: 从初始化的角度而言,这不是一个最佳的处理办法.虽然这会让对象的指最终为你期望的值,但是实际上,对象的成员变量的初始化动作发生在进入构造函数本体之前.而在构造函数本体之内,不是被初始化,而是被赋值. 2 较佳的写法:使用成员变量初始化列表 结果和上一个的最终结果相同,但是效率较高. 规定:总是在初值列表中列出所有成员变量…