0

假设我有以下代码:

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 复制赋值运算符,即使它没有使用它。

4

1 回答 1

1

为 and调用赋值运算符是没有意义的x1x2因为您没有分配给它们中的任何一个。v2的赋值运算符将使其内部数组足够大以容纳 的所有元素,v1然后将 的所有元素复制v1v2

于 2013-03-30T02:25:56.190 回答