2013-08-16 10 views
15

क्या इसी तरह की (लेकिन सीमित नहीं) कुछ उन्नत तकनीकों कच्चे संकेत का उपयोग कर की तुलना में प्रत्येक स्मार्ट सूचक के बराबर उपयोग हैं ?std :: बनाम std :: shared_ptr बनाम std :: weak_ptr unique_ptr बनाम std :: auto_ptr कच्चे संकेत बनाम

मेरे समझ कम है, लेकिन से मैं क्या इकट्ठा कर सकते हैं:

  • कच्चे प्वाइंटर: केवल अगर तुम सच में, सच, सच में, सच, पता है कि तुम क्या कर रहे हैं और ध्यान से उपयोग के पीछे छिपा हुआ है का उपयोग एक इंटरफ़ेस
  • std :: auto_ptr: अप्रचलित कभी नहीं का उपयोग करें।
  • std :: unique_ptr: सिंगलटन सूचक है कि काम पर स्वामित्व हस्तांतरित करता है।
  • std :: shared_ptr: संदर्भ सूचक है कि काम पर स्वामित्व का हस्तांतरण नहीं है, लेकिन इसके संदर्भ गिनती वृद्धि कर देता है गिना। जब सभी संदर्भ स्कोप छोड़ते हैं या स्पष्ट रूप से std::shared_ptr::reset अंतर्निहित deallocator कहा जाता है।
  • std :: weak_ptr: एक उप-प्रकार std::shared_ptr जो संदर्भ गणना में वृद्धि नहीं करता है और उसके माता-पिता std::shared_ptr मौजूद नहीं होने पर इसे अमान्य कर दिया जाता है। वापसी और अमान्य संदर्भ मई। हमेशा उपयोग करने से पहले जांचें।

रॉ सूचक समकक्ष उदाहरण

संदर्भ गिनती, कैश कार्यान्वयन:

class Keyboard { 
public: 
//... 
    static Keyboard* CreateKeyboard(); 
    ~Keyboard(); 
//... 
private: 
//... 
    Keyboard(); 
    static Keyboard* _instance; 
//... 
}; 

सकल कोन: स्वामित्व के हस्तांतरण के साथ std::map<std::string, std::pair<long, BITMAP*> > _cache;

Singletons tainers, कोई स्वामित्व: स्थानिक विभाजन रेखांकन और पेड़, पुनरावृत्ति कंटेनर, आदि

समग्र कंटेनर, स्वामित्व: बड़े वस्तुओं।

--EDIT--

मैं काम कर रहा हूँ के रूप में मैं एक दिलचस्प मामले पर आया था, DeadMG ने बताया कि स्मार्ट संकेत संसाधन प्रबंधन की देखभाल करने के लिए आसान कपोल-कल्पना के रूप में प्रयोग की जाने वाली अपेक्षा की जाती है; फ़ाइल-स्कोप ऑब्जेक्ट्स के बारे में क्या है जो घोषणा के बिंदु पर ढेर पर नहीं बनाया जा सकता है बल्कि बाद में इसे बनाया जाना चाहिए?

+2

मुझे समझ नहीं आता कि तुम क्या पूछ रहे हैं। कच्चे पॉइंटर्स के साथ स्मार्ट पॉइंटर व्यवहार को कैसे कार्यान्वित करें? –

+1

मुझे नहीं पता कि यह सवाल क्या है, लेकिन यदि आप सिंगलटन पॉइंटर 'unique_ptr' को कॉल कर रहे हैं, तो मुझे संदेह है कि आपके यहां सिंगलटन का एक अलग अर्थ है। – Puppy

+0

@NeilKirk सटीक विपरीत, वास्तव में, कच्चे पॉइंटर्स की तुलना में स्मार्ट पॉइंटर्स के उपयोग क्या हैं? यानी प्रत्येक स्मार्ट सूचक को प्रतिस्थापित करने के लिए क्या मुहावरे है? – Casey

उत्तर

4

क्या मुहावरा प्रत्येक स्मार्ट सूचक को बदलने के लिए माना जाता है?

उनमें से प्रत्येक एक, कभी-कभी, अंततः बिंदु-संसाधन को नष्ट करने में शामिल था। तो दूसरे शब्दों में, वस्तुतः उनमें से सभी। मैं कच्चे पॉइंटर्स से जुड़े किसी भी मुहावरे के बारे में सोच सकता हूं जिसमें एक बिंदु-संसाधन को नष्ट करने में शामिल नहीं था। हर दूसरे उपयोग वास्तव में एक मुहावरे नहीं है, यह सिर्फ "एक सूचक का उपयोग कर रहा है"।

+0

कुल कंटेनर अपने पॉइंट-टू-संसाधनों को नष्ट नहीं करते हैं, वे उन्हें केवल एक सूची से हटा देते हैं। यह एक मुख्य चिंता है कि स्मार्ट पॉइंटर्स का अध्ययन करते समय मेरे पास स्मार्ट पॉइंटर ऐसे उपयोग के लिए संभावित उम्मीदवार होगा? – Casey

+0

@Casey: यदि वे अपने निर्देशित संसाधनों को नष्ट नहीं करते हैं, तो वे एक स्मार्ट सूचक का उपयोग क्यों करेंगे? स्मार्ट पॉइंटर्स चीजों को नष्ट करने के लिए हैं। – Puppy

+0

ठीक है, यही कारण है कि मैं उलझन में था। प्रत्येक व्यक्ति जिसने स्मार्ट पॉइंटर्स की वकालत की है, मैंने किसी भी रूप या फैशन में कच्चे पॉइंटर्स के उपयोग का जोरदार विरोध किया है और इसे एक स्मार्ट सूचक के साथ प्रतिस्थापित किया जाना चाहिए। – Casey

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