结构中的复制构造函数:是否复制数组

时间:2014-12-17 12:57:47

标签: c++ copy-constructor assignment-operator

我对C ++中的复制构造函数行为有疑问。我有一个结构如下:

struct Vec4
{
public:
   float elems[4];

};

现在,如果我做了类似的事情:

Vec4 copied = some_func(); // returns a Vec4 object

这会执行elms数组的深层复制还是只复制指针地址?我认为它应该是后者,应该提供一个显式的复制构造函数和赋值运算符,但我不确定。

我做了一个小测试,它完成了应该做的事情,但我不确定这是不是偶然!

1 个答案:

答案 0 :(得分:2)

是的,elemsVec4对象的子对象,因此它会随Vec4一起被复制。没有要复制的指针。数组元素实际上嵌入在Vec4对象中。

我发现深层和浅层的术语在C和C ++中有点误导。我认为更好的思考方式是默认副本不会遵循任何级别的间接(例如指针)。你可以拥有一个非常“深层”的对象(许多子对象的子对象等),其中没有涉及间接,并且仍然会复制整个事物,但我们仍然将其称为“浅层副本”。如果需要遵循任何间接,则需要实现执行“深层复制”的自定义复制构造函数。