条款 4:确定对象在使用前已被初始化
无初值对象在 C/C++ 中广泛存在,永远在使用对象之前先将它初始化,因此这一条款就尤为重要。
对于无任何成员的内置类型,在定义完一个对象后需要尽快为它赋初值:
int x = 0;
const char* text = "A C-style string";
double d;
std::cin >> d;
对于类中的成员变量而言,需要通过构造函数进行初始化,确保每一个构造函数都将对象的每一个成员初始化。
注:对象的成员变量的初始化发生在进入构造函数之前,在构造函数内使用“=”是给成员变量赋值,而不是初始化,初始化发生在成员变量的default构造函数被自动调用时。(基于赋值的构造函数,首先调用default构造函数为成员变量设初值,然后再对它们赋新值)
我们有两种建议的方法完成初始化工作,一种是直接在定义处赋初值(since C++11):
class CTextBlock {
private:
std::size_t textLength{ 0 };
bool lengthIsValid{ false };
};
另一种是使用构造函数成员初始化列表(基于初值列的构造函数,对成员变量设实参,每个成员变量以实参为初值进行copy构造,效率更高;对于