向量赋值操作符和复制构造函数

Vector assignment operator and copy constructor

本文关键字:构造函数 复制 赋值操作符 向量      更新时间:2023-10-16

假设我有以下代码:

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的赋值运算符不是更一致吗?显然,对vector对象进行复制赋值并不意味着对其元素进行复制赋值。

如果我有一个类,其中复制构造和复制赋值必须具有不同的语义怎么办?

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

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