C++ Sposta il compito


Esempio

Analogamente a come possiamo assegnare un valore a un oggetto con un riferimento a lvalue, copiandolo, possiamo anche spostare i valori da un oggetto a un altro senza costruirne uno nuovo. Chiamiamo questo incarico di movimento. Spostiamo i valori da un oggetto a un altro oggetto esistente.

Per fare ciò, dovremo sovraccaricare l' operator = , non in modo che richieda un riferimento a lvalue, come nell'assegnazione delle copie, ma in modo che richieda un riferimento di rvalue.

class A {
    int a;
    A& operator= (A&& other) {
        this->a = other.a;
        other.a = 0;
        return *this;
    }
};

Questa è la tipica sintassi per definire l'assegnazione del movimento. Noi sovraccarichiamo l' operator = modo che possiamo nutrirlo con un riferimento di rvalue e può assegnarlo a un altro oggetto.

A a;
a.a = 1;
A b;
b = std::move(a); //calling A& operator= (A&& other)
std::cout << a.a << std::endl; //0
std::cout << b.a << std::endl; //1

Quindi, possiamo spostare assegnare un oggetto a un altro.