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 simplesmentemovemas, é 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.

questionAnswers(2)

yourAnswerToTheQuestion