Effective C++ 第四条 Make sure that objects are initialized before

确定对象被使用前已先被初始化
C++的对象创建之后,在某些情况下会被初始化,有些情况下却不会,这一点难以靠记忆来分辨,所以需要在创建之后立即初始化,养成良好习惯。
在我们在C++中创建变量的时候,可能会忘记初始化
但是这样存在潜在的风险,如果我们输出 a 到屏幕上,可能会产生出无法预知的结果。因为我们申请的临时变量是存储在栈(stack)上的,在存储a的位置可能之前存储过别的变量,而临时变量的释放并不会将空间内容抹去,仅仅只是将 rsp 指针增大(stack由高地址向低地址增长),所以不对申请的变量初始化而直接使用是个不好的习惯。
赋值和初始化
赋值并不等于初始化,C++规定对象的成员变量初始化动作在进入构造函数本体之前
以类的构造函数为例
初始化的效果和赋值的效果是一样的,但是初始化的效率比赋值要高很多。所以应该尽量采用初始化的方式来写代码。
初始化是有顺序的,在类中,变量 m 先于变量 n 声明,初始化同样按照这个顺序。
多文件编译需要注意的事项
在本例子中,类A和类B在两个编译模块中,其中A的成员函数fun通过调用b的op函数其作用,但是要考虑到,如果b没有被初始化呢?那么程序就会出错。在《Effective C++》中采取了一个办法,就是使用 static 来解决,方法如下
利用static修饰产生一个b,这样可以避免遇到b未初始化的问题。