हमारे पास एक सी ++ लाइब्रेरी है जिसे हम कई अलग-अलग ग्राहकों को प्रदान करते हैं। हाल ही में हमने बूस्ट :: sharedptr का उपयोग करने के लिए सार्वजनिक इंटरफ़ेस में कच्चे पॉइंटर्स का उपयोग करने से स्विच किया है। इसने एक बड़ा लाभ प्रदान किया है, जैसा कि आप अनुमान लगा सकते हैं, उस समय ग्राहकों को अब चिंता करने की ज़रूरत नहीं है कि किसके लिए और कब हटाना है। जब हमने स्विच किया तो मुझे विश्वास था कि यह करना सही था, लेकिन इससे मुझे परेशान था कि हमें अपने सार्वजनिक इंटरफ़ेस में किसी तृतीय-पक्ष लाइब्रेरी से कुछ शामिल करना था - आम तौर पर यदि आप कर सकते हैं तो आप उस तरह की चीज़ से बचें। मैंने तर्कसंगत किया कि बूस्ट अब सी ++ भाषा का हिस्सा था, और हमारे उपयोग के मामले में यह आवश्यक है कि क्लाइंट कोड और लाइब्रेरी दोनों ऑब्जेक्ट्स को पॉइंटर्स रखें। हालांकि हाल ही में हमारे ग्राहकों में से एक ने हमसे पूछा है कि क्या हम इंटरफ़ेस में एक तटस्थ स्मार्ट पॉइंटर क्लास का उपयोग करने के लिए स्विच कर सकते हैं, क्योंकि हमारी लाइब्रेरी अनिवार्य रूप से उन्हें बढ़ावा देने के एक विशेष संस्करण के लिए मजबूर कर रही है- एक बिंदु जिसे मैं निश्चित रूप से समझता हूं और सराहना करता हूं। तो अब मैं सोच रहा हूं कि कार्रवाई का सबसे अच्छा तरीका क्या हो सकता है। मैंने इसके बारे में थोड़ा सोचा है, और एक साधारण स्मार्ट पॉइंटर क्लास बनाने के बारे में सोचा है जो कि वास्तविक बूस्ट स्मार्ट पॉइंटर रखता है। लेकिन फिर ग्राहक शायद उनमें से एक को बढ़ावा देने के स्वाद में साझा करेंगे :: sharedptr, और फिर हम तीन साझा पॉइंटर्स गहरे होंगे - जो एक समस्या हो सकती है, या ऐसा नहीं हो सकता है। वैसे भी, मुझे इस समस्या को हल करने के सर्वोत्तम तरीके के बारे में समुदाय से कुछ राय सुनना अच्छा लगेगा।बूस्ट का उपयोग :: लाइब्रेरी के सार्वजनिक इंटरफेस में साझा_ptr
संपादित करें: मैंने मूल रूप से स्वामित्व का हस्तांतरण कहा था, लेकिन मुझे यह निर्दिष्ट करना चाहिए था कि एपीआई सीमा के दोनों किनारों पर उस कोड को ऑब्जेक्ट को पॉइंटर रखने की आवश्यकता है।
हां, लेकिन हम अपने ग्राहकों को विजुअल स्टूडियो 2008 में जाने के लिए मजबूर नहीं कर सकते, जहां टीआर 1 शामिल है, आईआईआरसी। कुछ अभी भी वीएस 2005 पर हैं। –
क्या आप अपने लाइब्रेरी हेडर के साथ बूस्ट TR1 फ़ोल्डर शामिल कर सकते हैं? मुझे यह देखने के लिए लाइसेंस देखना होगा कि क्या यह कानूनी है, लेकिन शायद यह है। साथ ही, चूंकि boost :: shared_ptr <> बस एक टेम्पलेट है, कोई साझा या स्थैतिक पुस्तकालय आवश्यक नहीं है। –
ध्यान दें कि टीआर 1 भाषा का हिस्सा नहीं है, लेकिन यह पुस्तकालयों का एक (आधिकारिक) सूचनात्मक संग्रह है जो भविष्य के भाषा मानक का हिस्सा हो सकता है। यहां देखें: http://www.iso.org/iso/standards_development/processes_and_procedures/deliverables/iso_tr_deliverable.htm –