您的位置:首页 > 编程语言 > C语言/C++

C++编程规范之48:在构造函数中使用初始化代替赋值

2014-02-28 13:04 232 查看
摘要:

设置一次,到处是用:在构造函数中,使用初始化代替复制来设置成员变量,能够防止发生不必要的运行时操作,而输入代码的工作量则保持不变。

构造函数会在系统内部生成初始化代码。考虑如下代码:

class Employee
{
         string firstName, lastName;
public:
         Employee(){ firstName ="Leo"; lastName = "Chu" }
};


实际上,生成的构造函数代码将类似于:

Employee():firstName_(), lastName_(){ firstName_ = "Leo"; lastName_ ="Chu" }

也就是说,并未显式初始化的对象将使用其默认构造函数自动初始化,然后使用复制操作符进行赋值。非简单(nontrivial)对象的赋值操作符所做的比构造函数还稍多一点,因为它要处理已经构造了的对象。

有话直说最好:在初始化列表中初始化成员变量,代码表达意图更加明确,而且锦山添花的是,代码通常还会更小、更快。

Employee():firstName_("Leo"), lastName_("Chu"){ }

这可不是不成熟的优化,这是在避免不成熟的劣化。

例外情况:

应该总是在构造函数体内而不是初始化列表中执行非托管资源获取,比如并不立即将结果传递给智能指针构造函数的new表达式。当然,最好是一开始就没有这种不安全的无属主资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: