2

我有一个list<Myobj>包含一些Myobj实例的源,如果我将它分配给一个空list<MyObj>目标,那么在内容方面究竟会发生什么?

Myobj实例是否通过浅拷贝在目标中重复?复制构造函数被调用了吗?或者它们根本没有重复?

4

2 回答 2

9

第一个列表中的所有对象都复制到第二个列表中。这里最好不要考虑“浅”和“深”的复制。元素被复制,复制的“深度”取决于类的复制构造函数或赋值运算符的作用。如果您的类型 T 是普通指针,则指针将被复制,但不会复制它们指向的内容。没有特殊的魔法发生。

请注意,有些细微之处取决于作业的来源或 RHS 是什么(感谢@mooingduck 提醒我这一点)。在 C++11 中,存在可以将 RHS 的内容移动到 LHS 的情况,在这种情况下根本没有复制。

于 2013-01-24T00:23:47.460 回答
3

赋值之后,左侧在语义上等同于赋值之前的右侧,只要类型Myobj足够健全(例如,如果它是类类型,它的复制构造函数和赋值运算符也满足这一点)。

于 2013-01-24T00:30:15.540 回答