C++向量复制赋值,调用其元素的哪种复制机制?

Gau*_*ier 5 c++ vector copy-constructor copy-assignment

我的课A显式实现了它的复制构造函数和复制赋值。

当复制分配此类元素的向量时,使用哪种复制机制?

这是:

vector<A> a1, a2(5);
a1 = a2;
Run Code Online (Sandbox Code Playgroud)

是否要对A的所有新元素使用 的复制构造函数a1,并将 的元素a2作为输入?

a1或者它会为元素腾出空间,然后使用A'operator=和 的 元素a2作为输入?

a1如果赋值前不为空怎么办?

还指定了吗?

我的类的复制构造函数并operator=没有完全执行相同的操作(这是不好的做法吗?到目前为止主要是测试内容)。看起来复制构造函数被调用了,但我想知道是否一定会这样,或者在这种情况下是否恰好如此。

Sto*_*ica 5

在此上下文中,它将调用复制构造函数 5 次。由于a1为空,因此没有任何要分配的元素。所以它们需要被复制构建。

一般来说,它会调用任何适当的复制/移动构造/分配或删除的组合。一切都取决于相关向量的大小、您正在执行的特定向量运算以及操作数的值类别。