निम्नलिखित कार्यक्रम पर विचार करें:क्या std :: move() iterators को अमान्य करता है?
struct list_wrapper
{
std::vector<int> m_list;
};
int main()
{
std::vector<int> myList { 1, 1, 2, 3, 5 };
const std::vector<int>::iterator iter = myList.begin();
list_wrapper wrappedList;
wrappedList.m_list = std::move(myList);
// Can I still dereference iter?
return 0;
}
std::move(myList)
करने के लिए कॉल करने के बाद, iter
अब wrappedList.m_list
अंदर एक वैध आइटम को इंगित करता है, या ऐसा कदम कंस्ट्रक्टर्स/कार्य सभी iterators अमान्य?
'std :: move' अपने दम पर कुछ नहीं करता है को शामिल किया गया। चाल असाइनमेंट निश्चित रूप से दोनों तरफ इटेटर को अमान्य करता है। – user2357112
शायद यह क्यूए मदद करेगा: http://stackoverflow.com/questions/3413470/what-is-stdmove-and-when-should-it-be-used?rq=1 –
@ user2357112 [वास्तव में ...] (http://eel.is/c++draft/container.requirements.general#12) (प्रासंगिक पैराग्राफ n3337 में समान है, बस [कंटेनर.रेक्वायरमेंट्स.general]/11 पर 12)। – jaggedSpire