2013-02-25 42 views
14

क्या कोड सही है?क्या एक अद्वितीय_प्टर के पास एक नलप्टर मान होना चाहिए?

unique_ptr<A> p(new A()); 
p = nullptr; 

मैं nullptr का उपयोग करना चाहिए एक * unique_ptr साथ *? या यह असफल हो जाएगा?

मैं इसे g ++ पर आज़माता हूं, लेकिन, अन्य कंपाइलर्स के बारे में क्या?

उत्तर

26

यह काम करेगा।

पैराग्राफ सी ++ 11 unique_ptr<> वर्ग टेम्पलेट के बारे में मानक की 20.7.1.2.3/8-9 से

:

unique_ptr& operator=(nullptr_t) noexcept;

प्रभाव: reset()

Postcondition: get() == nullptr

यह है कि वर्ग टेम्पलेट unique_ptr<> की परिभाषा operator = की एक अधिभार उस प्रकार nullptr_t (जैसे nullptr) ने अपने दाहिने हाथ की ओर के रूप में की एक मान स्वीकार भी शामिल है का मतलब है, अनुच्छेद यह भी निर्दिष्ट करता है कि nullptr को unique_ptr पर unique_ptr को रीसेट करने के बराबर है।

इस प्रकार, इस असाइनमेंट के बाद, आपकी A ऑब्जेक्ट नष्ट हो जाएगी।

+0

मैं देखता हूं। बीटीडब्ल्यू, केवल नलप्टर के पास nullptr_t है, जिस तरह से यह किया गया है, है ना? – Zhen

+1

@Zhen: मानक यह निर्दिष्ट नहीं करता है। आप 'nullptr_t' प्रकार का एक चर बना सकते हैं, लेकिन मुझे संदेह है कि आपको कभी भी ऐसा करने की आवश्यकता होगी। –