पिछले कुछ वर्षों से आक्रामक, मैं आम तौर पर स्वीकार कर लिया है किबनाम सी में गैर इनवेसिव रेफरी बार गणना संकेत ++
मैं रेफरी बार गणना स्मार्ट संकेत
आक्रामक स्मार्ट संकेत है उपयोग करने के लिए जा रहा हूँ अगर
-
:
- मैं केवल स्मार्ट पॉइंटर्स का उपयोग करता हूं (इसलिए कोई फू * झूठ बोल रहा है, केवल पीआरआर)
- मैं प्रत्येक कक्षा के लिए कस्टम आवंटकों का निर्माण शुरू कर रहा हूं। (तो फू ऑपरेटर को अधिभारित करेगा)।
- अब, अगर फू में सभी पीआरटी की सूची है (क्योंकि यह आसानी से गैर-आक्रामक स्मार्ट पॉइंटर्स के साथ हो सकती है)।
- फिर, मैं स्मृति विखंडन समस्याओं से बच सकता हूं क्योंकि कक्षा फू ऑब्जेक्ट्स को चारों ओर स्थानांतरित करता है (और केवल इसी पीआरटी को अपडेट करता है)।
हालांकि, मैं निम्नलिखित की वजह से गैर इनवेसिव स्मार्ट संकेत पसंद करने के लिए शुरू कर रहा हूँ -
जाने का रास्ता
केवल कारण है कि इस फू गैर इनवेसिव स्मार्ट संकेत आक्रामक स्मार्ट संकेत की तुलना में आसान होने में चारों ओर की वस्तुओं चलती है:
गैर इनवेसिव स्मार्ट संकेत में, वहाँ केवल एक सूचक है कि प्रत्येक फू ओर इशारा करता है ।
आक्रामक स्मार्ट पॉइंटर्स में, मुझे नहीं पता कि प्रत्येक फू को कितनी वस्तुएं इंगित करती हैं।
अब, गैर-आक्रामक स्मार्ट पॉइंटर्स की एकमात्र लागत ... डबल इंडिकेशन है। [शायद यह कैश को खराब कर देता है]।
क्या किसी के पास महंगी का एक अच्छा अध्ययन है, इस अतिरिक्त परत की संकेत है?
संपादित करें: स्मार्ट पॉइंटर्स द्वारा, मैं दूसरों को "साझा-पॉइंटर्स" कहने का जिक्र कर सकता हूं; पूरा विचार है: ऑब्जेक्ट्स से जुड़ी एक संदर्भ-गणना है, और जब यह 0 हिट हो जाती है, तो ऑब्जेक्ट स्वचालित रूप से हटा दिया जाता है
मुझे लगता है कि स्मार्ट पॉइंटर्स द्वारा आपका मतलब साझा पॉइंटर्स (जो कि स्मार्ट पॉइंटर्स का एक प्रकार है) का मतलब है। मैंने shared_ptr (अक्सर विनाश आदेश के साथ समस्याएं, विशेष रूप से थ्रेडेड सिस्टम में समस्याएं) के साथ बहुत सी समस्याओं में भाग लिया है और ऐसा लगता है कि साझा पॉइंटर्स का उपयोग आम तौर पर निराश होना चाहिए। ऑटो स्टोरेज अभी तक सबसे अच्छा विकल्प है (जब यह उपयुक्त है) और यहां तक कि कहीं और scoped_ptrs share_ptrs से बेहतर विकल्प होते हैं। – Tronic
@ पुरानी: मैंने अपना खुद का आक्रामक स्मार्ट पॉइंटर लिखा था। मैं उन्हें बहु थ्रेडेड समस्याओं में उपयोग कर रहा हूं। मुझे विनाश आदेश की समस्या कभी नहीं मिली है। इन विनाश आदेश की समस्याएं क्या हैं जो केवल बहु थ्रेडेड मामलों में प्रकट होती हैं? – anon
मान लें कि आपके पास दो अलग-अलग स्मार्ट पॉइंटर ऑब्जेक्ट्स हैं जो पॉइंट साझा करते हैं। मान लीजिए, दो थ्रेड हैं जो प्रत्येक स्मार्ट पॉइंटर की प्रतिलिपि बनाना चाहते हैं (इसलिए आपको अंत में 4 मिलते हैं)। यहां समस्या यह है कि रेफरी काउंटर एक्सेस को सिंक्रनाइज़ किया जाना चाहिए, भले ही ऑब्जेक्ट स्वयं को छुआ न जाए। – sellibitze