2012-02-05 10 views
7

shared_ptr का उपयोग करते समय, क्या मुझे केवल shared_ptr घोषणा का उपयोग करना चाहिए या हर जगह shared_ptr घोषित करना चाहिए?shared_ptr का उपयोग करते समय मुझे सिर्फ साझा_ptr घोषणा का उपयोग करना चाहिए या साझा_ptr को हर जगह घोषित करना चाहिए?

तो समारोह जहाँ मैं उदाहरण के नए में मैं एक shared_ptr में लपेट लेकिन जब मैं समारोह से इसे वापस मैं भी एक shared_ptr लौट सकता है या, shared_ptr पर get() का उपयोग कर, सिर्फ एक सामान्य सूचक लौट आते हैं।

तो मेरा सवाल यह है कि, क्या मैं सिर्फ shared_ptr<myType> का उपयोग करता हूं, जब मैं उदाहरण नया करता हूं और फिर सामान्य पॉइंटर्स पास करता हूं या मुझे हर जगह shared_ptr<myType> पास करना चाहिए?

उत्तर

5

shared_ptr बनाना अपनी पॉइंट ऑब्जेक्ट पर जादुई शक्तियों को प्रभावित नहीं करता है। जादू shared_ptr — और इसकी प्रतियां — में है। यदि आप इसका उपयोग करना बंद कर देते हैं, तो आप अपना संदर्भ गिनती खो देते हैं; बदतर, क्योंकि आपने इसे पर किसी बिंदु पर उपयोग किया था, जब आप इसकी अपेक्षा नहीं करते हैं तो ऑब्जेक्ट स्वचालित रूप से हटा दिया जाएगा।

shared_ptr होने के पूरे मुद्दे आप जानते हैं कि जब आप अभी भी इसे कहीं का उपयोग कर रहे अपने वस्तु नष्ट हो नहीं होगा।

निम्नलिखित में:

T* foo() { 
    shared_ptr<T> sp(new T()); 
    return sp.get(); 
    //^the only shared_ptr<T> referencing the obj is dead; 
    // obj is deleted; 
    // returned pointer invalid before you can even do anything with it 
} 

अपने सूचक तुरंत अमान्य है।

ऐसी परिस्थितियां भी हो सकती हैं जिनमें आप कच्चे सूचक को निकालते हैं, लेकिन ये दुर्लभ होना चाहिए। यदि आप ऐसे फ़ंक्शन में हैं जहां आप जानते हैं आपको संदर्भ गणना की आवश्यकता नहीं है, तो संदर्भ में shared_ptr पास करें।

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