我有一个list<Myobj>
来源,其中包含一些Myobj
个实例,如果我将其分配给空的list<MyObj>
目标,那么内容方面究竟会发生什么?
Myobj
个实例是否通过浅拷贝复制到目标中?是复制构造函数吗?或者它们根本没有重复?
答案 0 :(得分:9)
第一个列表中的所有对象都将复制到第二个列表中。最好不要在这里考虑“浅”和“深”复制。复制元素,副本的“深度”取决于类的复制构造函数或赋值运算符的作用。如果您的类型T是普通指针,那么指针将被复制,但不会被复制。没有特别的魔法。
请注意,有一些细微之处取决于作业的来源或RHS(感谢@mooingduck提醒我这一点)。在C ++ 11中,有些情况下RHS的内容可以移动进入LHS,在这种情况下根本没有复制。
答案 1 :(得分:3)
在赋值之后,左侧在语义上等同于赋值之前的右侧,只要类型Myobj
足够理智(例如,如果其复制构造函数和赋值运算符也满足此条件,则这是一种类型。)