复制构造函数在非基元的成员初始化中

时间:2015-09-24 06:05:39

标签: c++ constructor

我没有得到明确的学术答案,测试证明是犹豫不决的;大多数成员初始化的例子都使用原语,例如

Rectangle::Rectangle (int x, int y) : width(x), height(y) { }

我正在寻找带引用的成员初始化,

Shape::Shape (Rectangle& r) : rect(r) {}

后者是使用默认的复制构造函数(Rectangle)初始化rect(r)还是rect = r的简短形式?

测试表明我可以使用构造函数,但我无法观察到复制构造函数的相似行为

Shape::Shape (string& str) : rect(str) {}

为此,Rectangle有一个Rectangle:Rectangle(string&)构造函数

1 个答案:

答案 0 :(得分:4)

总是在该语法中使用构造函数。它不能分配,因为你只能分配给构造的对象,所以它正在运行一个构造函数而然后分配......放心,语言赢了'做那样的事。

为了帮助说明构造函数和赋值之间的区别...... Rectangle rect = r;调用构造函数,而不是赋值,尽管它的外观。但是,一旦rect已经宣布,rect = r;就是分配。只有在rect已经存在时才有意义分配,这在该对象的初始构造期间不会发生,因为它还不存在。

此外,在您的测试中,您可能会对Copy Elision.

感到困惑