2011-12-15 8 views

उत्तर

12

सामान्य 17.6.5.15/1 में लागू होता है:

सी ++ मानक पुस्तकालय में परिभाषित प्रकार के ऑब्जेक्ट (12.8) से ले जाया जा सकता है। चालान संचालन स्पष्ट रूप से निर्दिष्ट या स्पष्ट रूप से उत्पन्न किया जा सकता है। अन्यथा निर्दिष्ट किए जाने तक, इस तरह की चालित वस्तुओं को वैध लेकिन अनिर्दिष्ट स्थिति में रखा जाएगा।

इस प्रकार आप किसी भी कार्य को कॉल कर सकते हैं जिसके लिए कोई पूर्व शर्त नहीं है।

यदि निर्दिष्ट है, what @Xeo said लागू होता है।

+0

मैंने अपने उत्तरों को पार किया, हमने दोनों को पूर्ण उत्तर का एक हिस्सा जोड़ा। :) – Xeo

+0

एक चाल के बाद पुरानी वस्तु को दायरे से बाहर निकलने या फिर से उपयोग करने से पहले इसे फिर से शुरू करने के लिए सबसे अच्छा है। कोई पूर्व शर्त नहीं होने वाली विधि पर निर्भर करते हुए रखरखाव की समस्या बन जाएगी (कुल्हाड़ी रखने वाले व्यक्ति ने कहा)। –

13

यदि निर्दिष्ट है, तो यह उनके कन्स्ट्रक्टर के तहत है और (यदि असाइन करने योग्य) असाइनमेंट ऑपरेटर उपखंड है। shared_ptr के लिए हमने:

§20.7.2.2.1 [util.smartptr.shared.const]

shared_ptr(shared_ptr&& r) noexcept; 
template<class Y> shared_ptr(shared_ptr<Y>&& r) noexcept; 

p20 टिप्पणी: दूसरे निर्माता अधिभार संकल्प में भाग नहीं होगा जब तक कि Y*T* के लिए परिवर्तनीय है।
पी 21 प्रभाव:r से shared_ptr उदाहरण ले जाएं।
पी 22 पोस्टकंडिशन:*this में r का पुराना मान होगा। rखाली होगा। r.get() == 0

shared_ptr का काम ऑपरेटरों मूल रूप से कर रहे हैं एक अस्थायी (ले जाया गया है, तो rvalue) तर्क से निर्मित के साथ कॉपी-और-स्वैप द्वारा वर्णन करता है:

§20.7.2.2.3 [util.smartptr.shared.assign]

shared_ptr& operator=(shared_ptr&& r) noexcept; 
template<class Y> shared_ptr& operator=(shared_ptr<Y>&& r) noexcept; 

p4 प्रभाव :shared_ptr(std::move(r)).swap(*this) के बराबर।
पी 5 रिटर्न:*this

यदि निर्दिष्ट नहीं है, what @AProgrammer said लागू होता है।

+4

मुझे इस पोस्ट के संदर्भ के बाद एक स्टैक ओवरफ़्लो में पकड़ा गया ... –

+2

@Matthieu: लगता है जैसे आपको टीसीओ की आवश्यकता है। ; -] – ildjarn