[英]copy constructor in a member initialization for non-primitive
我无法获得确切的学术答案,并且测试已被证明是举棋不定的; 成员初始化的大多数示例都使用原语,例如
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&)构造函数
构造函数始终以该语法使用。 它不能被赋值,因为您只能赋给已构造的对象,因此它将运行一个构造函数, 然后赋值……放心,该语言将不会做类似的事情。
为了帮助说明构造函数和赋值函数之间的区别,... Rectangle rect = r;
调用构造函数,而不是赋值,尽管它看起来很漂亮。 但是,一旦rect
已经宣布, rect = r;
是分配。 分配仅在rect
已经存在时才有意义,因为该对象尚不存在,所以在该对象的初始构造期间不会发生分配。
另外,在测试中, Copy Elision可能会使您感到困惑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.