Olası Çoğalt:
Does moving a vector invalidate iterators?Std :: vector :: data() taşınarak mı korunur?
aşağıdaki kodları düşünün:
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
o vec.data() != data
hat 12'de mümkün mü? Benzer şekilde,
std::vector<T> buffer;
// ... Fill in buffer ...
T* data = buffer.data();
auto vec = std::move(buffer);
// line 5
mümkün mü bu hat 5'de
vec.data() != data
?
Pratik olarak her ikisi de libstdC++ ve libC++ uygulamasında mümkün değildir, çünkü hareket yapıcılar basit işaretçi atamaları olarak uygulanmıştır, ancak standart bir şey belirtmemektedir (Is the capacity required to be preserved when moving a std::vector?'a benzer). "Sabit karmaşıklık" vec.data() == data
'u garanti edebilir mi?
Yineleyicileri/göstergeleri geçersiz kılan şeyler oldukça iyi sayılır. –
Ayrıca, ilgili: http://stackoverflow.com/questions/4124989/does-stdvectorswap-invalidate-iterators –