मैं unique_ptr और rvalue move philosophy के साथ उलझन में हूँ।तो क्या stl संग्रह में unique_ptr सुरक्षित रूप से उपयोग किया जा सकता है?
मान लीजिए कि हम दो संग्रह करते हैं:
std::vector<std::auto_ptr<int>> autoCollection;
std::vector<std::unique_ptr<int>> uniqueCollection;
अब मैं उम्मीद करेंगे विफल, वहाँ कोई कह क्या एल्गोरिथ्म आंतरिक रूप से कर रही है और हो सकता है आंतरिक धुरी प्रतियां और की तरह कर रही है, इस प्रकार फाड़ है के रूप में निम्नलिखित auto_ptr से स्वामित्व दूर:
std::sort(autoCollection.begin(), autoCollection.end());
मुझे यह मिलता है। और संकलक सही ढंग से इस घटना को अस्वीकार करता है।
std::sort(uniqueCollection.begin(), uniqueCollection.end());
और यह संकलित:
लेकिन तब मैं यह कर। और मुझे समझ में नहीं आता क्यों। मुझे नहीं लगता कि unique_ptrs की प्रतिलिपि बनाई जा सकती है। क्या इसका मतलब है कि एक पिवट मूल्य नहीं लिया जा सकता है, तो सॉर्ट कम कुशल है? या यह पिवट वास्तव में एक कदम है, जो वास्तव में auto_ptrs के संग्रह के रूप में खतरनाक है, और संकलक द्वारा अस्वीकृत किया जाना चाहिए?
मुझे लगता है कि मुझे जानकारी का कुछ महत्वपूर्ण टुकड़ा याद आ रहा है, इसलिए मैं उत्सुकता से किसी को आह की आपूर्ति करने का इंतजार कर रहा हूं! पल।
दरअसल संकलक * को 'std :: vector> ऑटोकॉलेक्शन के बारे में शिकायत करनी चाहिए; क्योंकि किसी भी विवरण में COAPS (ऑटो पॉइंटर्स के कंटेनर) की अनुमति नहीं है। –
वीएस -2010 का उपयोग करना। मुझे/डब्ल्यू 4 पर चेतावनी भी नहीं मिली है। – DanDan
या एक चेतावनी प्राप्त करें कि auto_ptr को कम किया गया है। – DanDan