繁体   English   中英

非原始成员初始化中的复制构造函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM