Dipende dal codice classe. Se la classe non ha un costruttore di riferimento di rvalue e un operatore di assegnazione, std :: move viene ignorato. std :: move non sposta nulla, consente solo di trattare il suo argomento come riferimento di rvalue, se è disponibile la funzione appropriata.
Scritto correttamente & & costruttore e operatore = deve lasciare l'istanza del parametro in uno stato coerente, come una stringa vuota, e l'oggetto deve essere utilizzabile. Se c'è operatore =, un altro oggetto può essere assegnato correttamente a tale istanza vuota.
Modifica.
Generalmente, std :: mossa dovrebbe essere utilizzato per applicare semantica di movimento verso variabile non rvalue, ma in realtà è:
SomeClass::SomeClass(SomeClass&& v)
{
// Inside of this function, v is not rvalue anymore. But I know that actually
// this is rvalue, and use std::move
OtherFunction(std::move(v));
}
In questo caso, il requisito mininal a v è che dovrebbe essere in grado morire senza problemi.
Quando std :: move viene utilizzato per la variabile che non è effettivamente un riferimento di valore, in realtà, questa variabile di utilizzabilità potrebbe non essere definita. Per le mie classi personali, garantirei una certa coerenza per questo caso. Per altre classi, dipende dall'implementazione specifica della classe, ma non applicherei std :: move agli oggetti che non sono effettivamente riferimenti di valore. Non so davvero come questo sia definito (e se sia definito) nello standard.
fonte
2010-10-06 12:55:23
Avevo dimenticato std: swap, buon punto. –
Sembra essere l'unico requisito ragionevole, oltre alla distruzione, per qualsiasi tipo. Prenderò nota che l'operatore di assegnazione del movimento potrebbe essere cancellato (producendo quindi un errore in fase di compilazione) e che lo scambio richiede MoveAssignable (§20.3.2p1, 0x FCD) per rendere questo lavoro-implicando alcuni tipi, che non possono essere usato con lo scambio, * non * MoveAssignable. –
E sembra che \ _move \ _assign (§20.7.4.3, tabella 45, 0x FCD) indichi se MoveAssignable è soddisfatto. –