संभव डुप्लिकेट:
Does moving a vector invalidate iterators?क्या std :: vector :: डेटा() चलकर संरक्षित है?
पर विचार करें निम्नलिखित कोड:
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
यह लाइन 12 में है कि vec.data() != data
संभव है? इसी तरह,
std::vector<T> buffer;
// ... Fill in buffer ...
T* data = buffer.data();
auto vec = std::move(buffer);
// line 5
क्या यह संभव है कि लाइन 5 में vec.data() != data
?
व्यावहारिक रूप से libstdC++ और libC++ के कार्यान्वयन में दोनों संभव नहीं हैं, क्योंकि चालक रचनाकारों को सरल सूचक असाइनमेंट के रूप में कार्यान्वित किया जाता है, लेकिन ऐसा लगता है कि मानक इस पर कुछ भी निर्दिष्ट नहीं करता है (Is the capacity required to be preserved when moving a std::vector? के समान)। क्या "निरंतर जटिलता" गारंटी दे सकती है कि vec.data() == data
?
चीजें जो इटरेटर्स/पॉइंटर्स को अमान्य करती हैं वे बहुत अच्छी तरह से गणना की जाती हैं। –
यह भी संबंधित है: http://stackoverflow.com/questions/4124989/does-stdvectorswap-invalidate-iterators –