Nelle mie classi uso std::vector
ecc. Come variabili membro, che vengono con i propri costruttori di movimento. Non dichiaro esplicitamente i costruttori di move per le mie classi e non sono dichiarati implicitamente per la maggior parte.Le variabili membro in oggetti temporanei vengono spostate implicitamente quando possibile?
Se il costruttore di copie implicite o l'operatore di assegnazione implicito della mia classe viene chiamato con un valore rvalue, i membri che hanno spostato i costruttori sono stati copiati o spostati?
Se vengono spostati, c'è qualche ragione per cercare di evitare i provvisori quando si usano classi con membri costruibili per lo spostamento?
Se si utilizza C++ 11 verranno spostati, se C++ 03 verranno copiati. Da C++ 11 tutte le classi di contenitore di libreria standard trarranno vantaggio dalla semantica del movimento. –
Ma questo non sarebbe il caso se dichiaro esplicitamente un costruttore di copia giusto? Per quanto ne so, l'associazione di un riferimento const a un valore rval e l'assegnazione dei contenuti non consentirebbe l'utilizzo degli operatori di assegnazione del movimento dei membri. – gokturk
_ "non sono dichiarati implicitamente per la maggior parte." _ Allora il tuo tipo non ha la semantica del movimento, quindi non è possibile spostare i membri –