Mover atribuição e membro de referência
A atribuição de cópia para uma classe com uma variável de membro de referência é um não-não porque você não pode reatribuir a referência. Mas e quanto à transferência de tarefas? Eu tentei simplesmentemove
mas, é claro, isso destrói o objeto de origem quando eu quero apenas mover a própria referência:
class C
{
public:
C(X& x) : x_(x) {}
C(C&& other) : x_(std::move(other.x_)) {}
C& operator=(C&& other)
{
x_ = std::move(other.x_);
}
private:
X& x_;
};
X y;
C c1(y);
X z;
C c2(z);
c2 = c1; // destroys y as well as z
Devo apenas não estar implementando atribuição de movimento e aderindo apenas à construção de movimento? Isto fazswap(C&, C&)
difícil de implementar.