आप नहीं कर सकते हैं, क्योंकि यह सबसे बुनियादी unique_ptr
नियम का उल्लंघन होगा: वहाँ केवल एक उदाहरण है कि किसी भी सूचक रखती हो, pointee है, और unique_ptr
यह (के पूर्ण स्वामित्व है जब यह क्षेत्र से बाहर चला जाता है हटा दिया गया है)।
unique_ptr<T>
और unique_ptr<U>
(जहां U : T
) जैसा कि आपने देखा है, संगत नहीं हैं।
shared_ptr
, जिसके लिए आप अनेक उदाहरण हो सकते के लिए, वहाँ std::static_pointer_cast
कि सिर्फ एक static_cast
तरह बर्ताव करता है, सिवाय इसके कि यह एक shared_ptr
स्वीकार करता है और एक और एक (और एक ही वस्तु के लिए दोनों बिंदु) रिटर्न है।
यदि आपको पूरी तरह से unique_ptr
का उपयोग करने की आवश्यकता है, तो आपको एक ऐसा फ़ंक्शन बनाना होगा जो पहले आपके वर्तमान unique_ptr
को अस्वीकार कर देगा और उस पॉइंटर को सही प्रकार के नए में डाल देगा। आपको अपने फ़ंक्शन कॉल के बाद विपरीत रूपांतरण करने की भी आवश्यकता हो सकती है।
है 'एक बहुरूपी उदाहरण foo'? – Mahesh
कोई भी फ़ंक्शन बनाएं जो स्मृति से आया है या बाद में क्या होता है, इसके संदर्भ में पैरामीटर लें (या कच्चे सूचक अगर यह शून्य हो)। –
@NeilKirk: यह कार्य फ़ंक्शन के लिए है, लेकिन संग्रह में 'unique_ptr ' स्टोर करने के लिए यह उचित उपयोग केस है। और यदि फ़ंक्शन को इसे स्टोर करना है ... –