2017-02-09 13 views
6

को विधि shared_ptr अंक वस्तु पर कहा जाता है के लिए एक shared_ptr चलती सी ++ 17 क्योंकि x->fX::f को तर्क से पहले का मूल्यांकन बनाया गया है, है ना? जहां तक ​​मुझे पता है कि सी ++ के पुराने संस्करणों में ऐसी कोई गारंटी नहीं है। मैं सी ++ 11 और सी ++ 14 में कुछ समान कैसे प्राप्त कर सकता हूं?को देखते हुए</p> <pre><code>struct X { void f(std::shared_ptr<X>); }; auto x(std::make_shared<X>()); </code></pre> <p>मैं शायद सुरक्षित रूप में</p> <pre><code>x->f(std::move(x)); </code></pre> <p>कर सकते हैं

पीएस: नोट std::shared_ptr के बजाय std::unique_ptr का उपयोग करते समय भी लागू होता है।

+0

यह भी सवाल है कि क्या यह एक वस्तु को नष्ट करने के लिए सुरक्षित है का तात्पर्य है एक ही वस्तु के सदस्य फ़ंक्शन के दायरे को ले जाने के भीतर/जब भीतर। जिज्ञासा से बाहर: आप ऐसा क्यों करना चाहते हैं? – Pixelchemist

उत्तर

4

मुझे लगता है कि सबसे अच्छा एक में कर सकते हैं सी ++ 11 और सी ++ 14 इंटरफेस बदल रहा है या किसी अस्पष्ट मैक्रो का उपयोग कर के बिना

auto & refX = *x; 
refX.f(std::move(x)); 
+0

कड़ाई से बोलते हुए, आपको केवल उस ऑब्जेक्ट पर dereferencing x और कॉलिंग f के बीच एक अनुक्रम बिंदु प्रस्तुत करना होगा। यह उस के लिए एक बहुत पठनीय समाधान प्रदान करता है। – WorldSEnder

संबंधित मुद्दे