सी ++ 11 में हम हमेशा unique_ptr
का उपयोग करना चाहिए या shared_ptr
बजाय new
/delete
की? प्रदर्शन के साथ यह कैसे है, स्मार्ट पॉइंटर्स बहुत धीमे हैं?सी ++ 11 स्मार्ट पॉइंटर्स हमेशा नए/हटाए जाने के बजाय?
उत्तर
unique_ptr
नहीं जो भी कच्चे संकेत उपयोग की तुलना में किसी भी क्रम भूमि के ऊपर है (करने वाला नहीं है) करता है। shared_ptr
में कुछ मेमोरी और टाइम ओवरहेड है (कार्यान्वयन पर कितना निर्भर करता है)। व्यावहारिक भूमि के ऊपर यहाँ आसानी से शून्य हो सकता है यदि आप वास्तव में कुछ है कि एक shared_ptr
तरह बर्ताव करता है की जरूरत है (जो है, कोई अन्य कार्यान्वयन आप में से लगता है कि किसी भी तेजी से या अधिक स्मृति कुशल हो जाएगा)।
कहने के लिए आप नए का उपयोग कभी नहीं करेंगे नहीं है यही कारण है कि/अपने कोड में हटा सकते हैं, लेकिन यह कुछ आप हर समय करूँगा नहीं है।
मैं) क्योंकि-
1 कच्चे स्मृति को संभालने के लिए यह RAII और Counted body मुहावरों इस प्रकार shared_ptr पसंद करेंगे।
2) वस्तु को नष्ट कर दिया जाना निश्चित है, स्मृति, भले ही अपवाद तब होता है जारी किया गया है।
3) जब नए के लिए निर्णय लेने की कोई और अधिक Choas/हटा सकते हैं।
प्वाइंट 2 सत्य नहीं है। यदि कोई share_ptr किसी ऑब्जेक्ट को संदर्भित करता है जिसमें shared_ptr होता है जो किसी भी तरह से पहले वापस संदर्भित करता है। आपके पास मेमोरी रिसाव होगा। संपादित करें: तो आपको अभी भी यह जानने की आवश्यकता होगी कि आप स्मार्ट पॉइंटर्स के साथ या उसके बिना क्या हैं। – Tim
प्वाइंट 2 सत्य है, चक्रीय संदर्भ एक "मान्य" राज्य है। 'shared_ptr' आपको केवल तभी देता है जब' ref_count == 0' उसकी कॉल 'हटाएं'। – Yankes
- 1. सी ++ 11 स्मार्ट पॉइंटर्स और पॉलिमॉर्फिज्म
- 2. स्मार्ट पॉइंटर्स
- 3. सी ++ स्मार्ट पॉइंटर्स लॉकफ्री हैं?
- 4. बूस्ट स्मार्ट पॉइंटर्स
- 5. स्मार्ट पॉइंटर्स और डायनामिक_कास्ट
- 6. सी ++ स्मार्ट पॉइंटर्स: शेयरिंग पॉइंटर्स बनाम डेटा साझा करना
- 7. स्मार्ट पॉइंटर्स बनाम संदर्भ
- 8. स्मार्ट पॉइंटर्स और सरणी
- 9. स्मार्ट पॉइंटर्स विनाशक का वेक्टर
- 10. बूस्ट स्मार्ट पॉइंटर्स और स्टडी स्मार्ट पॉइंटर्स के बीच क्या अंतर है?
- 11. कच्चे पॉइंटर्स के बिना सी ++ 11 में निर्भरता इंजेक्शन
- 12. ओपनसीवी या बूस्ट स्मार्ट पॉइंटर्स
- 13. सी के लिए स्मार्ट पॉइंटर्स/सुरक्षित मेमोरी प्रबंधन?
- 14. आईओएस 11 - स्मार्ट कोट्स
- 15. स्मार्ट पॉइंटर्स के साथ आभासी कन्स्ट्रक्टर मुहावरे
- 16. क्या जावा में "स्मार्ट पॉइंटर्स" हैं?
- 17. जावा में स्मार्ट पॉइंटर्स और रेफ गिनती
- 18. क्या सी ++ स्मार्ट पॉइंटर्स का उपयोग सी के मॉलोक के साथ करना संभव है?
- 19. सी ++ स्मार्ट पॉइंटर प्रदर्शन
- 20. Std :: वेक्टर जैसे कंटेनर में स्मार्ट पॉइंटर्स?
- 21. स्मार्ट पॉइंटर्स, टाइपिफ और अग्रेषित घोषणाएं
- 22. सी ++ 11 रेंज-पॉइंटर्स के वेक्टर पर आधारित
- 23. सी ++ 11
- 24. intrusive_ptr सी ++ 11
- 25. क्या यह सी ++ 11 स्मार्ट पॉइंटर्स से प्राप्त करने के लिए ठीक है और रिश्तेदार ऑपरेटरों को ओवरराइड करता है?
- 26. डेटा संरचनाओं को लागू करते समय स्मार्ट या कच्चे पॉइंटर्स?
- 27. सी पॉइंटर्स बनाम उद्देश्य-सी पॉइंटर्स
- 28. स्मार्ट पॉइंटर्स के संदर्भों का उपयोग क्यों नहीं करना चाहिए?
- 29. स्मार्ट पॉइंटर्स के कंटेनर में एक आइटम जोड़ें
- 30. सी में स्मार्ट सूचक कार्यान्वयन
'unique_ptr' को शून्य-लागत वाले अमूर्त होने के लिए डिज़ाइन किया गया था। चिंता करना बंद करो और बम से प्यार करना सीखें। –
हम ** 'new' और' delete' के बजाय स्मार्ट पॉइंटर्स ** का उपयोग कैसे कर सकते हैं। 'हटाएं' – iammilind
@iammilind 'make_shared' से बचने के लिए हमें **' new' के साथ ** ** का उपयोग करना होगा और मैं 'make_unique' के कार्यान्वयन का भी उपयोग करता हूं। बेशक अभी भी आंतरिक रूप से 'नया' का उपयोग करता है। – Cubic