资源
#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 ::operator = 调用每个存储成员的重载运算符 A::operator =
结果不是我想要的。
我的预期结果是:
在点T 之后, va 的成员与 vb 完全相同
va [0]。名称为“第三”, va [1] .value 为“第四”。
但结果只是复制值(因为 A::operator = 仅复制 A::value )
在我的项目中,无法更改 A::operator = ,因为它已经使用了许多其他代码。
但我也想使用 std::container::operator = 。不使用指定的复印功能。
哪种方法可以做到?
最佳答案
的责任是,以这样一种方式来实现赋值运算符:在赋值a = b;
之后,对象a
与对象b
具有相同的语义。
如果您确实无法做到这一点,那么也许可以依靠隐式定义的副本构造函数:
std::vector<A>(vb).swap(va);
// ^^^^^^^^^^^^^
// copy of vb