我所知道的使用初始化列表的好处是什么,他们初始化类成员未建立,在时提供工作效率。 例如,
Fred::Fred() : x_(whatever) { }
优选的是,
Fred::Fred() { x_ = whatever; }
如果x是一个自定义的类的对象。 除此之外,这种风格与内建类型为统一起见,即使使用。
这样做的最普通的好处是提高性能。 如果表达式无论是相同类型的成员变量X_,无论何种表达构建直接内部X_的结果 - 编译器不使对象的单独副本。
与其他风格,无论造成一个独立的,临时对象的表达被创建,而这个临时对象被传递给x_对象的赋值操作符。 然后该临时对象在破坏。 这是低效的。
题
有没有在下面的例子中使用初始化列表中的任何效率增益。 我认为这是没有收获。 第一个版本调用字符串的拷贝构造函数和其他呼叫串的赋值操作符(有没有创建任何临时的多数民众赞成)。 这是正确的吗?
class MyClass
{
public:
MyClass(string n):name(n) { }
private:
string name;
};
class MyClass
{
public:
MyClass(string n)
{
name=n;
}
private:
string name;
};