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

摘要:

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

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

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表达式。当然,最好是一开始就没有这种不安全的无属主资源。

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

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

上一篇:C++ 时间标记类


下一篇:【Python实战12】使用字典关联数据