假设我有以下代码:
std::vector<myclass> v1;
v1.push_back (x1);
v1.push_back (x2);
std::vector<myclass> v2(v1);
当我运行上面的代码时,会调用 x1 和 x2 的复制构造函数来构建向量 v2,这似乎是正确的做法。
但是如果我以这种方式重写代码:
std::vector<myclass> v1, v2;
v1.push_back (x1);
v1.push_back (x2);
v2 = v1;
再次调用 x1 和 x2 的复制构造函数。这是正确的行为吗?为什么不调用赋值运算符?调用 x1 和 x2 的赋值运算符不是更一致吗?似乎向量的复制分配并不意味着其元素的复制分配。
如果我有一个类,其中复制构造和复制分配必须具有不同的语义怎么办?
编辑。在调用 v2=v1 之前 v2 是空的,但是在创建具有 2 个元素的向量之后不应该调用复制赋值吗?这对我来说似乎更一致......顺便说一句,当我尝试调用 v2=v1 时,编译器会强制定义 myclass 复制赋值运算符,即使它没有使用它。