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

原文链接: https://www.cnblogs.com/mcran/archive/2012/01/14/2322253.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    条款04 确定对象使用前已被初始化

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/40199

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午4:54
下一篇 2023年2月8日 下午4:54

相关推荐