条款04确定对象被使用前已被初始化
这应该是一个开发人员的一种习惯,虽然赋值过程会带来执行时的时间消耗,但与出现不可预知的错误相比,是值得我们去做的。
C:
对一些字符数组赋初始化值,可以避免字符串结束符‘\0’带来的问题;
指针等初始化等;
C++:
初始化:对象的成员变量的初始化动作发生在进入构造函数本地之前。
赋值:赋值=,可能会调用拷贝函数等。
C++中利用构造函数成员初始化列表要比在构造函数中调用赋值(=)进行赋值效率要高。
成员函数的初始化的顺序为:基类早于派生类成员。其他成员按照其声明顺序初始化变量。
Static成员会在main函数结束时会自动调用析构函数。
建议:
为内置型对象进行手工初始化,c++无法保证会初始化他们。
构造函数最好使用成员初值列。
以避免”跨编译单元初始化秩序“问题,建议用localstatic对象代替non-local static对象。
条款05了解C++默默编写并调用哪些函数
注意引用类型和常量类型是无法改变的。
建议:
一个空类所占内存1字节。
默默编写的函数有,默认构造函数、默认拷贝函数、默认赋值拷贝函数、默认析构函数。
条款06若不想使用编译器自动生成的函数,就该明确拒绝
有时不想使用默认拷贝函数、默认赋值拷贝函数,可以按照下面的建议去做。
建议:
可将相应的成员函数声明为private的,但是不实现该函数。如boost库中noncopyable基类。