コンテナーが連続していて、移動セマンティクスを同時にサポートするにはどうすればよいですか?
std::vector の例: 左辺値で std::move を使用して push_back() が呼び出された場合:
std::vector<MyClass> v;
MyClass obj;
MyClass obj2;
vt.push_back(std::move(obj));
vt.push_back(std::move(obj2));
obj と obj2 は、メモリ内で隣り合って割り当てられるとは限りません。ベクトルは連続したメモリに要素を持たなければならないので、この場合移動セマンティクスはどのように機能するでしょうか? obj2 をベクトル v の連続したメモリ領域 (obj の隣) にコピーする必要があるように思えます。そうしないと、連続性の要件が満たされません。しかし、それには移動ではなくコピーが必要です。上記とこれの違いは何ですか?:
MyClass obj;
MyClass obj2;
vt.push_back(std::move(obj));
vt.push_back(obj2);