Załóżmy, że mam następujący kod:Move z wektorem :: 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));
}
Zdaję sobie sprawę, że elementy z std :: vector są przechowywane w sposób zwarty, w przeciwieństwie do std :: listy. W powyższym kodzie został przeniesiony kod a2
, ale czy naprawdę nie ma kopiowania a2
do wektora va
? Jaka jest różnica między va.push_back(a2);
i ?
W twoim przypadku 'std :: move'ing' a2' robi dokładnie * nic *, ponieważ jest to typ płaski (tzn. Nie ma danych zewnętrznych) i nadal po prostu kopiuje. – Xeo
@cdhowie Dzięki. poprawione. – ggg
Możesz przeczytać [Czy ktoś może mi wyjaśnić semantykę przeniesienia?] (Http://stackoverflow.com/questions/3106110/) dla wprowadzenia do poruszania semantyki. – fredoverflow