条款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进行了初始话。在进入函数体后又对其赋值。也就是说,之前的初始化完全是在做无用功。



posted @ 2012-01-14 10:42  rookie_zw  阅读(105)  评论(0)    收藏  举报