मैं विभिन्न स्मार्ट सूचक कार्यान्वयन (वाह, वहाँ एक बहुत सारे हैं) और यह कि उनमें से ज्यादातर दो व्यापक वर्गीकरण में वर्गीकृत किया जा सकता है मुझे लगता है का मूल्यांकन किया गया है:सी ++ में स्मार्ट पॉइंटर्स को लागू करने का सबसे अच्छा तरीका क्या है?
1) इस श्रेणी में पर उत्तराधिकार का उपयोग करता है वस्तुओं का संदर्भ दिया गया है ताकि उनके पास संदर्भ संख्याएं हों और आमतौर पर ऊपर() और नीचे() (या उनके समकक्ष) लागू हों। आईई, स्मार्ट पॉइंटर का उपयोग करने के लिए, जिन वस्तुओं को आप इंगित कर रहे हैं उन्हें कुछ कक्षा से प्राप्त होना चाहिए जो रेफरी कार्यान्वयन प्रदान करता है।
2) यह श्रेणी संदर्भ गणना रखने के लिए एक द्वितीयक वस्तु का उपयोग करती है। उदाहरण के लिए, किसी ऑब्जेक्ट पर स्मार्ट पॉइंटर को इंगित करने के बजाय, यह वास्तव में इस मेटा डेटा ऑब्जेक्ट पर इंगित करता है ... संदर्भ संदर्भ संख्या और ऊपर() और नीचे() कार्यान्वयन (और जो आमतौर पर सूचक के लिए एक तंत्र प्रदान करता है वास्तविक वस्तु को इंगित किया जा रहा है, ताकि स्मार्ट सूचक ऑपरेटर ->()) को सही ढंग से कार्यान्वित कर सके।
अब, 1 में नकारात्मकता है कि यह उन सभी ऑब्जेक्ट्स को मजबूर करता है जिन्हें आप संदर्भित करना चाहते हैं, जो कि एक सामान्य पूर्वजों से प्राप्त होने के लिए गणना करते हैं, और इसका मतलब है कि आप इसका उपयोग उन गणना वस्तुओं के संदर्भ में नहीं कर सकते जिन पर आपके पास नियंत्रण नहीं है स्रोत कोड पर।
2 समस्या है क्योंकि गिनती किसी अन्य ऑब्जेक्ट में संग्रहीत की जाती है, यदि आपके पास कभी ऐसी स्थिति है कि किसी मौजूदा संदर्भ के लिए पॉइंटर को संदर्भ में संदर्भित किया जा रहा है, तो आपके पास शायद एक बग (आईई, गिनती वास्तविक वस्तु में नहीं है, गिनती प्राप्त करने के नए संदर्भ के लिए कोई रास्ता नहीं है ... निर्माण या असाइनमेंट की प्रतिलिपि बनाने से इनकार करना ठीक है, क्योंकि वे गिनती ऑब्जेक्ट साझा कर सकते हैं, लेकिन यदि आपको कभी भी एक से कनवर्ट करना है सूचक, आप पूरी तरह से छिपे हुए हैं) ...
अब, जैसा कि मैं इसे समझता हूं, boost :: shared_pointer तंत्र 2 का उपयोग करता है, या ऐसा कुछ ... उसने कहा, मैं अपने दिमाग को काफी नहीं बना सकता और भी बदतर है! मैंने उत्पादन कोड में केवल तंत्र 1 का उपयोग किया है ... क्या किसी को दोनों शैलियों के साथ अनुभव है? या शायद इन दोनों से बेहतर एक और तरीका है?
इसके अतिरिक्त, shared_ptr का बढ़ावा संस्करण TR1 में माइग्रेट हो गया है और अंत में मानक सी ++ लाइब्रेरी होगी। –
बूस्ट स्मार्ट पॉइंटर्स की एक प्रदर्शन तुलना यहां है: http://www.boost.org/doc/libs/1_39_0/libs/smart_ptr/smarttests.htm –