源
#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 = 。不使用指定的复印功能
哪种方式可以做到这一点?
答案 0 :(得分:4)
>以这样的方式实现赋值运算符 :在赋值a = b;
之后,对象a
具有与对象b
相同的语义
如果你真的不能这样做,那么也许你可以依赖隐式定义的复制构造函数:
std::vector<A>(vb).swap(va);
// ^^^^^^^^^^^^^
// copy of vb