मुझे वस्तुओं को साझा करने की ज़रूरत नहीं है, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि कोई स्मृति रिसाव न हो। क्या इस मामले में shared_ptr का उपयोग करना सही है?मैं auto_ptr के std :: vector का उपयोग नहीं कर सकता - क्या मुझे shared_ptr का उपयोग करना चाहिए?
उत्तर
यदि आप बूस्ट का उपयोग कर रहे हैं, तो boost::ptr_vector आपकी आवश्यकताओं के लिए बेहतर अनुकूल हो सकता है।
यदि नहीं, तो आप या तो shared_ptr
का उपयोग कर सकते हैं जैसा कि आपने सुझाव दिया है या वेक्टर के तत्वों को मैन्युअल रूप से हटाए जाने के बाद मैन्युअल रूप से हटा दें।
रखरखाव बिंदु से, shared_ptr
पसंदीदा समाधान होगा। नोट, हालांकि, shared_ptr
कुछ प्रदर्शन दंड ला सकता है, जो आपके आवेदन के लिए महत्वपूर्ण हो सकता है या नहीं भी हो सकता है।
यह एक ओवरकिल का थोड़ा सा है, लेकिन इसके लिए कोई बेहतर स्मार्ट पॉइंटर नहीं है। आप बूस्ट के सूचक कंटेनरों पर भी विचार कर सकते हैं।
सी ++ 0x में आप कंटेनर में std::unique_ptr
स्टोर करने में सक्षम होंगे, जो आपकी आवश्यकताओं के करीब है।
मैं unique_ptr के कंटेनर के लिए boost :: shared_ptr – amitlicht
+1 का उपयोग कर रहा हूं! – AshleysBrain
आप Boost.PointerContainer का भी उपयोग कर सकते हैं। shared_ptr
का उपयोग साझा स्वामित्व व्यक्त करता है। अब यदि आप सुनिश्चित हैं कि आपकी वस्तुएं कंटेनर के जीवनकाल तक सीमित हैं, तो PointerContainer बेहतर विकल्प डिज़ाइन-वार है (क्या यह भी एक शब्द है?)।
यदि निम्न स्तर का प्रदर्शन/स्मृति उपयोग महत्वपूर्ण आवश्यकताओं (यानी सभी मामलों का 9 7%) नहीं है तो बस shared_ptr के साथ जाएं। यह सीधा और अच्छी तरह से समझ में आता है।
यदि आप वास्तव में चीजों को कसकर रखना चाहते हैं और/या स्वामित्व के इरादे को व्यक्त करना चाहते हैं तो boost::ptr_vector बेहतर हो सकता है - लेकिन यदि आपकी कक्षा किसी अन्य मेमोरी का प्रबंधन नहीं करती है तो बस आपके विनाशक को मैन्युअल रूप से हटाने से बड़ा नहीं होता है पाप के रूप में हमें कभी-कभी विश्वास होता है ;-) मैं एक बड़ा राई समर्थक हूं, लेकिन समय-समय पर यह भी करता हूं।
- 1. क्या मुझे auto_ptr का उपयोग करना बंद कर देना चाहिए?
- 2. std :: auto_ptr का Idiomatic उपयोग या केवल shared_ptr का उपयोग करें?
- 3. shared_ptr का उचित उपयोग?
- 4. मुझे क्या gacutil.exe का उपयोग करना चाहिए?
- 5. क्या मुझे अपनी कक्षा में std :: vector सदस्य चर में std :: unique_ptr <T> का उपयोग करना चाहिए?
- 6. सी # में देशी सी ++ कोड का उपयोग करना - std :: vector
- 7. क्या मुझे jQuery.each() का उपयोग करना चाहिए?
- 8. क्या मुझे jQuery.inArray() का उपयोग करना चाहिए?
- 9. Std :: move का उपयोग करना
- 10. क्या मुझे HttpRuntime.Cache का उपयोग करना चाहिए?
- 11. क्या मुझे बूटस्ट्रैप का उपयोग करना चाहिए?
- 12. क्या मुझे इसका उपयोग करने से पहले boost :: shared_ptr या std :: shared_ptr जांचना चाहिए?
- 13. एक संरक्षित निर्माता \ नाशक साथ std :: shared_ptr का उपयोग कर
- 14. क्या मुझे boost :: ptr_vector <T> या वेक्टर <boost :: shared_ptr <T>> का उपयोग करना चाहिए?
- 15. क्या मुझे प्रोटोटाइप का उपयोग करना चाहिए या नहीं?
- 16. क्या मुझे इंटरफ़ेस निर्माता का उपयोग करना चाहिए या नहीं?
- 17. मुझे ईएमएफ का उपयोग क्यों करना चाहिए?
- 18. boost :: shared_ptr के बीच संघर्ष को हल करने और std :: shared_ptr का उपयोग कैसे करें?
- 19. क्या मुझे हमेशा सेवा का उपयोग करना चाहिए, या क्या मैं सीधे भंडार का उपयोग कर सकता हूं?
- 20. क्या मैं जोर :: host_vector का उपयोग कर सकता हूं या मुझे शून्य-प्रतिलिपि के साथ cudaHostAlloc का उपयोग करना चाहिए?
- 21. मुझे @properties का उपयोग क्यों करना चाहिए?
- 22. मुझे किस डीबी का उपयोग करना चाहिए?
- 23. मुझे glbindAttribLocation का उपयोग क्यों करना चाहिए?
- 24. क्या मुझे रूबी धागे का उपयोग करना चाहिए या थ्रेडिंग के लिए पूरी तरह रूबी का उपयोग नहीं करना चाहिए?
- 25. क्या मुझे cdors/असाइनमेंट ऑपरेटरों में std :: move या std :: आगे का उपयोग करना चाहिए?
- 26. क्या मुझे MySQL के बजाय NoSQL का उपयोग करना चाहिए?
- 27. प्वाइंटर्स बनाम auto_ptr बनाम shared_ptr
- 28. मुझे फ्लेक्स का उपयोग क्यों करना चाहिए?
- 29. सी # मुझे सूची का उपयोग कब करना चाहिए और मुझे सरणीसूची का उपयोग कब करना चाहिए?
- 30. मुझे कबूतरों का उपयोग करना चाहिए?
वेक्टर में आवंटित वस्तुओं को गतिशील रूप से आवंटित किया गया है? क्या उन्हें होना है? –