重複の可能性:
ベクトルを移動するとイテレータが無効になりますか?
次のコードを検討してください。
std::vector<T> prepare(T*& data) {
std::vector<T> buffer;
// Fill in buffer.
data = buffer.data();
return buffer;
}
...
T* data;
auto vec = prepare(data);
// line 12
vec.data() != data
12行目でそれは可能ですか?同様に、
std::vector<T> buffer;
// ... Fill in buffer ...
T* data = buffer.data();
auto vec = std::move(buffer);
// line 5
5行目でそれは可能vec.data() != data
ですか?
libstdc++とlibc++の実装では、実際には両方は不可能です。これは、moveコンストラクターが単純なポインター割り当てとして実装されているためですが、標準では何も指定されていないようです(stdを移動するときに容量を保持する必要があるのと同様です。 :vector?)。「一定の複雑さ」はそれを保証できvec.data() == data
ますか?