2011-03-04 14 views
16

साझा_ptr के बजाय intrusive_ptr का उपयोग कब किया जाना चाहिए?बूस्ट स्मार्ट पॉइंटर्स

+0

+1 अच्छा सवाल है, लेकिन एक [संभावित डुप्लिकेट] (http://stackoverflow.com/questions/569775/smart-pointers-boost-explained)। –

उत्तर

15

जब आपके पास पहले से ऑब्जेक्ट के अंदर एक संदर्भ काउंटर संग्रहीत किया गया है जिसे आप इंगित कर रहे हैं।

+1

+1, टाइपो के अलावा, इसलिए मैंने आपके लिए यह तय किया :)। –

11
परे सी ++ स्टैंडर्ड लाइब्रेरी से

: एक परिचय बढ़ाने के ब्योर्न कार्लसन से

अधिकांश स्थितियों में, आप को बढ़ावा देने :: intrusive_ptr उपयोग नहीं करना चाहिए, क्योंकि साझा स्वामित्व की कार्यक्षमता को बढ़ावा देने में आसानी से उपलब्ध है: : shared_ptr, और एक गैर-घुसपैठ स्मार्ट सूचक एक घुसपैठ स्मार्ट सूचक से अधिक लचीला है। हालांकि, ऐसे समय होते हैं जब किसी को विरासत संदर्भ गणना की आवश्यकता होती है, शायद विरासत कोड के लिए या तृतीय पक्ष वर्गों के साथ एकीकरण के लिए। जब आवश्यकता उत्पन्न होती है, intrusive_ptr उसी बूस्ट स्मार्ट पॉइंटर वर्ग के समान अर्थशास्त्र के साथ बिल फिट बैठता है।

बूस्ट स्मार्ट पॉइंटर्स का उपयोग करके, आप सभी स्मार्ट सूचक आवश्यकताओं के लिए एक सतत इंटरफेस सुनिश्चित करते हैं, चाहे वे घुसपैठ कर रहे हों या नहीं। संदर्भ संख्या को उन वर्गों द्वारा प्रदान किया जाना चाहिए जो intrusive_ptr के साथ उपयोग किए जाते हैं। intrusive_ptr दो कार्यों, intrusive_ptr_add_ref और intrusive_ptr_release को अयोग्य कॉल करके संदर्भ गणना का प्रबंधन करता है; इन कार्यों को सही ढंग से काम करने के लिए intrusive_ptrs के लिए घुसपैठ संदर्भ गणना में सही तरीके से हेरफेर करना चाहिए। उन सभी मामलों के लिए जहां intrusive_ptr के साथ उपयोग किए जाने वाले प्रकारों में संदर्भ संख्या पहले से मौजूद है, intrusive_ ptr के लिए समर्थन सक्षम करना उन दो कार्यों को लागू करने जितना आसान है।

intrusive_ptr उपयोग जब

  • आप एक स्मार्ट सूचक के रूप में इस इलाज के लिए की जरूरत है।
  • मौजूदा कोड है जो एक घुसपैठ संदर्भ गणना का उपयोग करता है या प्रदान करता है।
  • यह आवश्यक है कि स्मार्ट पॉइंटर का आकार कच्चे सूचक के आकार के बराबर हो।
3

क्या निक ने कहा। एक वास्तविक जीवन उदाहरण COM पॉइंटर्स का प्रबंधन कर रहा है।

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