मुझे इस बारे में अधिक जानकारी नहीं मिल रही है कि क्या Iterators अंतर्निहित वस्तु को पकड़ते हैं या नहीं।क्या सी ++ इटरेटर्स अंतर्निहित वस्तु का संदर्भ रखते हैं?
यदि मैं एक इटरेटर बना देता हूं, तो ऑब्जेक्ट जो इसे प्रदान करता है वह गुंजाइश से बाहर हो जाता है, क्या इटरेटर की उपस्थिति इसे नष्ट होने से रोकती है?
// This class takes a copy of iterators to use them later
class Data {
public:
Data(std::vector<int>::iterator start, std::vector<int>::iterator end)
: start(start),
end(end)
{}
void show() {
// Use this->start and this->end for some purpose
}
private:
std::vector<int>::iterator start;
std::vector<int>::iterator end;
};
Data test() {
std::vector<int> v{1, 2, 3};
Data d(v.begin(), v.end());
d.show(); // this would be ok
return d;
}
int main(void) {
Data d = test();
d.show(); // What happens here?
}
इस उदाहरण में, Data
वस्तु iterators की एक प्रति है, जो पहली show()
कॉल के लिए ठीक है भंडारण किया जाता है:
यहाँ एक बहुत ही सरल उदाहरण सिर्फ परिदृश्य वर्णन करने के लिए है। हालांकि दूसरे show()
कॉल के समय तक, मूल ऑब्जेक्ट जो इटरेटर की आपूर्ति करता है अब मौजूद नहीं है।
क्या इटेटरेटर ऑब्जेक्ट को तब तक रखते हैं जब तक कि वे सभी स्वयं नष्ट नहीं हो जाते हैं, या जैसे ही मूल वस्तु गुंजाइश से बाहर हो जाती है?
यहाँ one reference of many जो नहीं कहना है क्या एक ही रास्ता या अन्य होता है (या यहां तक कि क्या इसी का परिणाम 'अनिर्धारित' है।)
इटरेटर पॉइंटर्स पर मॉडलिंग किए जाते हैं। असल में, यदि कोई सूचक उच्च स्तर की चीज एक्स नहीं कर सकता है, तो न तो इटरेटर कर सकते हैं। –
हां, इटरेटर को अमान्य कर दिया जाएगा, परिणाम अपरिभाषित है। – songyuanyao
अपनी विशिष्ट स्थिति को हल करने के लिए: एक कंटेनर को नष्ट करना सभी इटरेटर को अमान्य करता है। –