तो, मैं कच्चे के बजाय स्मार्ट पॉइंटर्स का उपयोग करना चाहता हूं और एसओ पर लगभग हर विषय बूस्ट लाइब्रेरी के बारे में कहता है। लेकिन std में ऐसी चीजें हैं std::auto_ptr
और std::shared_ptr
। क्यों बूस्ट? अंतर क्या है?बूस्ट स्मार्ट पॉइंटर्स और स्टडी स्मार्ट पॉइंटर्स के बीच क्या अंतर है?
उत्तर
मूल रूप से बूस्ट ने shared_ptr
पहले किया था। आप ध्यान दें कि सी ++ 11 में कई नए कंटेनर कक्षाएं बूस्ट में बहुत पहले थीं। मैं उम्मीद करता हूं कि यह पैटर्न सी ++ मानक के अगले संशोधन के साथ भी जारी रहेगा। बूस्ट पुराने सी ++ कंपाइलर्स का समर्थन करता है जो सी ++ 11 से बात नहीं करते हैं, जो एक बड़ा लाभ है।
संयोग से, std::auto_ptr
सी ++ 11 है, जो बजाय std::shared_ptr
और std::unique_ptr
में लाता है, जो दोनों काफी अधिक उपयोगी होते हैं में मान्य नहीं है।
अधिक विशेष रूप से: बूस्ट डिज़ाइन स्पेस का पता लगाने और वास्तविक उपयोगकर्ताओं के साथ अपने पुस्तकालयों को सत्यापित करने के लिए लेखकों के लिए एक लाइब्रेरी खेल का मैदान है।सी ++ समिति (जिसमें ऐसे कई लेखकों को शामिल किया गया है) तब काम करता है और जो काम करता है उसे मानकीकृत करता है। –
ठीक है, 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 भी देखें।
संदर्भ:
यह भी देखें:
std :: auto_ptr btw बहिष्कृत है –
नया स्मार्ट संकेत दिए गए, जैसे 'std :: shared_ptr' आदि (' एसटीडी के अपवाद के साथ :: auto_ptr ') सी ++ में बूस्ट में एक ही नाम के साथ संरचनाओं के बाद मॉडलिंग किया गया था। –
आपके द्वारा उल्लेख किए गए उन SO आइटमों की तिथियों की जांच करें। 'बूस्ट :: shared_ptr' जैसे कई' बूस्ट 'स्मार्ट पॉइंटर्स, केवल पिछले वर्ष मानक में पेश किए गए थे (और इस प्रकार 'std :: shared_ptr' बन गए)। – Gorpik