c ++ STL容器存储一个重载operator =的类

时间:2011-12-13 20:10:08

标签: c++ vector operator-overloading std stdvector

#include <iostream>
#include <vector>
#include <string>

class A
{
public:
    std::string name;
    int value;
    A& operator = (const A& from) { value=from.value; return *this; }
    A(std::string a_name, int a_val) { name=a_name; value=a_val; }
};

int main()
{    
    std::vector<A> va;
    va.push_back(A("first",1));
    va.push_back(A("second",2));

    std::vector<A> vb;
    vb.push_back(A("third",3));
    vb.push_back(A("fourth",4));

    va = vb;   //point T

    return 0;

}

点T std :: vector&lt; A&gt; :: operator = 调用每个存储成员的重载运算符 A :: operator =

结果不是我想要的。

我的预期结果是:
点T 之后, va 的成员完全相同 vb ,如
va [0] .name 是“第三”, va [1] .value 是“第四”。

但结果只是复制值(因为 A :: operator = 仅复制 A ::值

在我的项目中, A :: operator = 无法更改,因为它已经使用了许多其他代码 但我也想使用 std :: container :: operator = 。不使用指定的复印功能
哪种方式可以做到这一点?

1 个答案:

答案 0 :(得分:4)

>以这样的方式实现赋值运算符 :在赋值a = b;之后,对象a具有与对象b相同的语义

如果你真的不能这样做,那么也许你可以依赖隐式定义的复制构造函数:

std::vector<A>(vb).swap(va);
//   ^^^^^^^^^^^^^
//    copy of vb