c++ - Pointers vs auto_ptr vs shared_ptr -


मुझे हाल ही में auto_ptr और shared_ptr के अस्तित्व के साथ पेश किया गया था और मेरे पास एक बहुत सरल / सरल सवाल है।

मैं एक डेटा संरचना को लागू करने की कोशिश करता हूं और मुझे एक नोड के बच्चों को इंगित करने की आवश्यकता है (जो 1 से अधिक है और इसके) नंबर बदल सकता है कौन सा सबसे अच्छा विकल्प है और क्यों:

  वर्ग नोड {public: // ... नोड * बच्चों; निजी: // ...} वर्ग नोड {सार्वजनिक: // ... share_ptr & lt; नोड & gt; बच्चे; निजी: // ...}  

मुझे यकीन नहीं है, लेकिन मुझे लगता है कि auto_ptr सरणियों के लिए काम नहीं करता। मैं, यह भी नहीं, यकीन है कि मुझे डबल पॉइंटर्स का उपयोग करना चाहिए या नहीं। किसी भी मदद के लिए धन्यवाद।

आप सही हैं कि auto_ptr arrays के लिए काम नहीं करता है जब वह ऑब्जेक्ट को नष्ट कर लेता है, तो यह ऑब्जेक्ट को हटाता है; बनाता है, इसलिए यदि आपने नई ऑब्जेक्ट्स [जो भी] इस्तेमाल किया है, तो , आपको अपरिभाषित व्यवहार मिलेगा शायद थोड़ा और अधिक आसानी से, auto_ptr "प्रतिलिपि" (जैसा कि मानक शब्द परिभाषित करता है) की आवश्यकताओं के अनुरूप नहीं है, ताकि आप कंटेनर (वेक्टर, डेक, सूची आदि) नहीं बना सकें। auto_ptr का या तो।

एक shared_ptr एक ही वस्तु के लिए भी है यह उस स्थिति के लिए है जहां आपने स्वामित्व साझा किया है और ऑब्जेक्ट को हटाने की आवश्यकता है, जब सभी मालिकों के दायरे से बाहर निकल जाएंगे जब तक कि कुछ ऐसा नहीं है जिसके बारे में आपने हमें बताया नहीं है, संभावना बहुत अच्छी है कि वह आपकी आवश्यकताओं को बहुत अच्छी तरह से फिट नहीं करता है।

आप अभी तक एक और वर्ग को देखना चाहेंगे जो कि नया हो सकता है आपको: बूस्ट कम से कम आपने जो कहा है उसके आधार पर, यह आपकी आवश्यकताओं को या तो auto_ptr या shared_ptr से बेहतर लगती है।


Comments