Supponiamo che io ho il seguente codice:Sposta con vector :: push_back
#include <vector>
struct A {
int a;
int x;
};
int main() {
using namespace std;
A a1;
A a2;
vector<A> va;
va.push_back(a1);
va.push_back(move(a2));
}
Sono consapevole del fatto che gli elementi di std :: vector sono memorizzati in modo contiguo, a differenza di uno std :: list. Nel codice sopra riportato a2
viene spostato, ma non c'è davvero nessuna copia di a2
nel vettore va
? Qual è la differenza tra va.push_back(a2);
e ?
Nel tuo caso, 'std :: move'ing' a2' fa esattamente * niente *, poiché è un tipo piatto (vale a dire, non ha dati esterni) e continuerà a copiare. – Xeo
@cdhowie Grazie. corretto. – ggg
Si consiglia di leggere [Qualcuno può spiegare a me la semantica del movimento?] (Http://stackoverflow.com/questions/3106110/) per un'introduzione alla semantica del movimento. – fredoverflow