unique_ptr<T>
प्रतिलिपि निर्माण की अनुमति नहीं देता है, इसके बजाय यह चाल शब्दार्थों का समर्थन करता है। फिर भी, मैं unique_ptr<T>
एक फ़ंक्शन से वापस आ सकता हूं और लौटाए गए मान को एक चर में असाइन कर सकता हूं ।
#include <iostream>
#include <memory>
using namespace std;
unique_ptr<int> foo()
{
unique_ptr<int> p( new int(10) );
return p; // 1
//return move( p ); // 2
}
int main()
{
unique_ptr<int> p = foo();
cout << *p << endl;
return 0;
}
कोड ऊपर संकलित है और इरादा के अनुसार काम करता है। तो यह कैसे होता है कि लाइन 1
कॉपी कंस्ट्रक्टर को आमंत्रित नहीं करती है और संकलक त्रुटियों में परिणाम होता है? अगर मुझे लाइन का उपयोग 2
करना था तो इसका मतलब होगा (लाइन 2
काम करता है साथ ही, लेकिन हमें ऐसा करने की आवश्यकता नहीं है)।
मुझे पता है कि C ++ 0x इस अपवाद की अनुमति देता है unique_ptr
क्योंकि रिटर्न वैल्यू एक अस्थायी ऑब्जेक्ट है जो कि फ़ंक्शन से बाहर निकलते ही नष्ट हो जाएगा, इस प्रकार रिटर्न पॉइंटर की विशिष्टता की गारंटी देता है। मैं इस बारे में उत्सुक हूं कि यह कैसे लागू किया जाता है, क्या यह संकलक में विशेष आवरण है या क्या भाषा विनिर्देश में कुछ अन्य खंड है जो इस शोषण को दर्शाता है?
unique_ptr
। पूरा प्रश्न 1 और 2 एक ही चीज़ को प्राप्त करने के दो अलग-अलग तरीके हैं।
main
फ़ंक्शन के बाहर निकलने के बाद किया जाता है, लेकिन बाहर निकलने पर नहीं foo
।