条款04 确定对象使用前已被初始化
读取未初始化的值会导致正确的结果。
主要看看类和结构体的初始化。
class A
{
public:
A(string strname)
{
m_name = strname;
}
~A(){}
private:
string m_name;
}
这样写没错,能完成对象的初始化工作。但在构造函数中完成的不是初始化动作,是赋值动作。
c++规定,对象成员初始化,发生在进入对象构造函数体之前。所以,以上的动作不是在初始化,而是在赋值。
最佳的初始化做法是:使用初始化列表。
class A
{
public:
A(string strname):m_name(strname)
{
}
~A(){}
private:
string m_name;
}
这样做也完成了对对象成员的初始化,但是效率通常更高一些。上一个版本,在进入构造函数之前就已经对m_name进行了初始话。在进入函数体后又对其赋值。也就是说,之前的初始化完全是在做无用功。
浙公网安备 33010602011771号