मान लीजिए मुझे निम्नलिखित करने की आवश्यकता है (यह सी ++ मानक की चर्चा के लिए केवल कुछ कल्पनाशील कोड है, इस प्रकार मैं चर्चा नहीं करूंगा कि मैं इसे इस तरह क्यों डिजाइन करता हूं, इसलिए मुझे कुछ इस तरह से परेशान न करें: आपका डिज़ाइन गलत है।)वही पता, एकाधिक साझा_प्टर काउंटर, क्या यह C++ मानक द्वारा प्रतिबंधित है?
T* ptr = new T;
shared_ptr<T> p(ptr);
shared_ptr<T> q(ptr, SomeDeleterThatDoesnotDeleteButDoSomeOtherStuff());
मान लीजिए तर्क गारंटी देता है कि p
या उसके प्रतियों की कुछ q
की सभी प्रतियों से अधिक समय रहता है, इसलिए व्यावहारिक रूप से कोई समस्या नहीं होगी। मेरा सवाल है, क्या यह सी ++ मानक द्वारा निषिद्ध है, उदा। एक ही पते को साझा करने के लिए अलग साझा_प्टर काउंटरों के लिए स्पष्ट रूप से यूबी के रूप में सी ++ मानक द्वारा कहा गया है?
धन्यवाद।
क्या होगा यदि आप 'वापस क्यू;'? –
@ पीटर मुझे लगता है कि यह विचार है - गैर-डिलीटर का आह्वान करना और ज्ञान के साथ कुछ उपयोगी करना कि संदर्भों का कुछ सबसेट अब खाली है। – Potatoswatter
डिजाइन * इसके * उद्देश्य के लिए भयानक नहीं है। आप उस कस्टम डिलीटर को प्रतिस्थापित करके उचित विनाश की गारंटी दे सकते हैं जो * करता है * हटाता है, और अपने स्वयं के 'shared_ptr'' का स्वामित्व भी करता है। एक डमी ऑब्जेक्ट जो उसके विनाशक में कार्रवाई करता है या 2. एक और कस्टम डिलीटर जो क्रिया करता है । लेकिन उन विधियों को कम कुशलता हो सकती है, यदि 'q' ऑब्जेक्ट्स का सेट उचित मालिकों 'पी' के सेट के सापेक्ष बदलता है। – Potatoswatter