स्थानांतरित कंटेनर का पुन: उपयोग करने का सही तरीका क्या है?
std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);
// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize
container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
मैंने C ++ 0x मानक ड्राफ्ट में जो पढ़ा है, उससे; ver3 सही तरीका प्रतीत होता है, क्योंकि किसी वस्तु को चाल में रखने के बाद
"जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, तब तक ऐसी स्थानांतरित वस्तुएं वैध लेकिन अनिर्दिष्ट स्थिति में रखी जाएंगी।"
मुझे कभी कोई उदाहरण नहीं मिला जहां यह "अन्यथा निर्दिष्ट" हो।
हालांकि मुझे ver3 थोड़ा चक्कर लगता है और इसमें बहुत पसंद किया जाने वाला ver1 होगा, हालांकि vec3 कुछ अतिरिक्त अनुकूलन की अनुमति दे सकता है, लेकिन दूसरी तरफ आसानी से गलतियां हो सकती हैं।
क्या मेरी धारणा सही है?
clear
, क्योंकि इसमें कोई पूर्व शर्त नहीं है (और इस प्रकार वस्तु की स्थिति पर कोई निर्भरता नहीं है)।