C++ 当列表<;T>;被分配到另一个列表<;T>;变量

C++ 当列表<;T>;被分配到另一个列表<;T>;变量,c++,C++,我有一个列表源,其中包含一些Myobj实例,如果我将其分配给一个空的列表目标,在内容方面会发生什么 Myobj实例是否通过浅拷贝在目标中复制?副本构造函数被调用了吗?或者它们根本不重复?第一个列表中的所有对象都复制到第二个列表中。最好不要在这里考虑“浅”和“深”复制。元素被复制,而复制的“深度”取决于类的复制构造函数或赋值运算符所做的操作。如果您的类型T是一个普通指针,那么指针将被复制,但不是它们指向的对象。没有什么特别的魔法 请注意,有些微妙之处取决于作业的来源或RHS(感谢@mooingdu

我有一个
列表
源,其中包含一些
Myobj
实例,如果我将其分配给一个空的
列表
目标,在内容方面会发生什么


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

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


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

赋值后,如果类型
Myobj
足够健全,则左侧在语义上与赋值前的右侧相同(例如,如果是类类型,其复制构造函数和赋值运算符也满足此要求)< /p>将为每个对象调用复制构造函数。是否执行浅层或深副本是实现的。也是强制性的NITCODY:您可能不需要<代码>列表<代码>。考虑使用<代码>矢量< /代码>。@ AddiiTya:<代码>也是强制性的NoTiPoice:您可能不需要列表。相反,这似乎是一个相当危险的概括,你不认为吗?重要的是要记住,列表存储的是t的实际元素,而不仅仅是指向它们的指针。@Non-StopTimeTravel好吧,我发现有人无论如何都会这么说,我当时心情不好。而且,如果有人真的在其中一个在极少数需要使用
列表的情况下,这个人足够聪明,知道他们到底在做什么。@MooingDuck我假设这个“源”列表确实是左值。@MooingDuck:那么另一件事是什么(不是左值)我假设这导致了移动操作?虽然准确,但这是一个听起来非常技术性的句子。@MooingDuck:嗯,我本可以说“他们是一样的”,但我感觉OP知道这一点。