2008-09-22 11 views
11

हम सभी जानते हैं कि आरएडब्लू पॉइंटर्स को कुछ प्रकार के स्मार्ट पॉइंटर में अपवाद सुरक्षित मेमोरी प्रबंधन प्राप्त करने की आवश्यकता है। लेकिन जब पॉइंटर्स के कंटेनर की बात आती है तो समस्या अधिक कांटेदार हो जाती है।पॉइंटर्स और कंटेनर

एसटीडी कंटेनर निहित वस्तु copyable किया जा रहा है पर जोर देते हैं तो यह std :: auto_ptr के उपयोग के बाहर शासन करता है, लेकिन तब भी आप को बढ़ावा देने :: shared_ptr आदि

उपयोग कर सकते हैं लेकिन वहाँ भी कुछ बढ़ावा स्पष्ट रूप से तैयार किया गया कंटेनर हैं संकेत सुरक्षित रूप धारण करने के लिए:
देखें Pointer Container Library

सवाल यह है: किन स्थितियों मैं smart_pointers के एक कंटेनर से अधिक ptr_containers का उपयोग करना पसंद करना चाहिए के तहत?

boost::ptr_vector<X> 

or 

std::vector<boost::shared_ptr<X> > 

उत्तर

13

बूस्ट सूचक कंटेनर संसाधनों वे पकड़ से अधिक सख्त स्वामित्व है कंटेनर संचालन टोंटी हैं। एक std :: वेक्टर < बढ़ावा :: shared_ptr < एक्स >> स्वामित्व साझा किया है। ऐसे कारण हैं जिनसे यह आवश्यक हो सकता है, लेकिन यदि ऐसा नहीं है, तो मैं :: ptr_vector < एक्स> को बढ़ावा देने के लिए डिफ़ॉल्ट होगा। YMMV।

1

खैर, ओवरहेड एक मामला है।

साझा पॉइंटर्स का एक वेक्टर बहुत ही अनूठी प्रतिलिपि करेगा जिसमें एक नया स्मार्ट सूचक, एक संदर्भ में वृद्धि, संदर्भ को कम करने, आदि का आकार बदलना शामिल है। यह सब एक सूचक कंटेनर से बचा है।

रूपरेखा आवश्यक है सुनिश्चित करने के लिए हालांकि :)

3

स्थिर: स्मार्ट पॉइंटर्स संसाधन प्रबंधन को संभालने का एक बहुत अच्छा तरीका है, लेकिन केवल एक ही नहीं। मैं मानता हूं कि आपको अच्छी तरह से लिखे गए सी ++ कोड में बहुत कम कच्चे पॉइंटर्स दिखाई देंगे, लेकिन मेरे अनुभव में आप कई स्मार्ट पॉइंटर्स को नहीं देखते हैं। कच्चे पॉइंटर्स के कंटेनरों का उपयोग करके कार्यान्वित बहुत से अपवाद-सुरक्षित वर्ग हैं।

+0

यह संभव है और कभी-कभी सबसे अच्छा विकल्प होता है, लेकिन यदि किसी वर्ग में 2 या अधिक रॉ पॉइंटर्स अपवाद सुरक्षित बनाते हैं तो यह मामूली नहीं है। लेकिन मुझे सवाल का जवाब न देने के लिए आपको नीचे चिह्नित करना चाहिए। –

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

  • कोई संबंधित समस्या नहीं^_^