2012-11-07 14 views
9

तो, मैं कच्चे के बजाय स्मार्ट पॉइंटर्स का उपयोग करना चाहता हूं और एसओ पर लगभग हर विषय बूस्ट लाइब्रेरी के बारे में कहता है। लेकिन std में ऐसी चीजें हैं std::auto_ptr और std::shared_ptr। क्यों बूस्ट? अंतर क्या है?बूस्ट स्मार्ट पॉइंटर्स और स्टडी स्मार्ट पॉइंटर्स के बीच क्या अंतर है?

+0

std :: auto_ptr btw बहिष्कृत है –

+0

नया स्मार्ट संकेत दिए गए, जैसे 'std :: shared_ptr' आदि (' एसटीडी के अपवाद के साथ :: auto_ptr ') सी ++ में बूस्ट में एक ही नाम के साथ संरचनाओं के बाद मॉडलिंग किया गया था। –

+0

आपके द्वारा उल्लेख किए गए उन SO आइटमों की तिथियों की जांच करें। 'बूस्ट :: shared_ptr' जैसे कई' बूस्ट 'स्मार्ट पॉइंटर्स, केवल पिछले वर्ष मानक में पेश किए गए थे (और इस प्रकार 'std :: shared_ptr' बन गए)। – Gorpik

उत्तर

17

मूल रूप से बूस्ट ने shared_ptr पहले किया था। आप ध्यान दें कि सी ++ 11 में कई नए कंटेनर कक्षाएं बूस्ट में बहुत पहले थीं। मैं उम्मीद करता हूं कि यह पैटर्न सी ++ मानक के अगले संशोधन के साथ भी जारी रहेगा। बूस्ट पुराने सी ++ कंपाइलर्स का समर्थन करता है जो सी ++ 11 से बात नहीं करते हैं, जो एक बड़ा लाभ है।

संयोग से, std::auto_ptr सी ++ 11 है, जो बजाय std::shared_ptr और std::unique_ptr में लाता है, जो दोनों काफी अधिक उपयोगी होते हैं में मान्य नहीं है।

+3

अधिक विशेष रूप से: बूस्ट डिज़ाइन स्पेस का पता लगाने और वास्तविक उपयोगकर्ताओं के साथ अपने पुस्तकालयों को सत्यापित करने के लिए लेखकों के लिए एक लाइब्रेरी खेल का मैदान है।सी ++ समिति (जिसमें ऐसे कई लेखकों को शामिल किया गया है) तब काम करता है और जो काम करता है उसे मानकीकृत करता है। –

4

ठीक है, std::shared_ptr और boost:shared_ptr संदर्भ संदर्भ बिंदु दोनों हैं। इसके बजाय std :: auto_ptr बहुत अलग तरीके से काम करता है। std::shared_ptr और boost:shared_ptr के बीच का अंतर बहुत छोटा और अधिकतर ऐतिहासिक रूप से है। सी ++ 11 से पहले std::shared_ptr और केवल boost:shared_ptr नहीं था। जब सी ++ 11 डिज़ाइन किया गया था, तो उन्होंने मॉडल के रूप में boost:shared_ptr लिया।

आपके सभी उल्लिखित स्मार्ट पॉइंटर्स में आम बात है कि उनके पास यह सुनिश्चित करने के लिए स्वयं का तंत्र है कि अंक के लिए जीवनकाल प्रबंधन सही तरीके से किया जाता है। auto_ptr काम करता है ताकि यदि आपके पास auto_ptr के कई उदाहरण हैं तो उनमें से केवल एक वास्तविक वस्तु के लिए सूचक है। जब भी आप auto_ptr को auto_ptr से बनाते हैं, तो नया ऑब्जेक्ट और पुराने को NULL पर इंगित करेगा। shared_ptr साथ दूसरी ओर वहाँ कई shared_ptr इंस्टेंस का हिस्सा एक ही वस्तु, केवल जब पिछले एक दायरे से बाहर चला जाता है, उसके बाद ही वस्तु हटा दी जाती है हो सकता है ..

सी ++ 11 में एक समान सूचक है std::auto_ptr पर टाइप करें, अर्थात् std::unique_ptr, लेकिन कुछ महत्वपूर्ण अंतर हैं, std::auto_ptr to std::unique_ptr भी देखें।

संदर्भ: