矢量赋值运算符和复制构造函数

时间:2013-03-30 02:19:55

标签: c++ stl

假设我有以下代码:

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的赋值运算符会不会更加一致?似乎向量的复制赋值并不意味着它的元素的复制赋值。

如果我有一个复制构造和复制分配必须具有不同语义的类,该怎么办?

EDIT。在调用v2 = v1之前v2为空,但是在创建具有2个元素的向量之后不应该调用复制赋值?这对我来说似乎更加一致......顺便说一句,当我尝试调用v2 = v1时,编译器强制定义myclass复制赋值运算符,即使它没有使用它。

1 个答案:

答案 0 :(得分:1)

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