c++ - what is auto_ptr_ref, what it achieves and how it achieves it -
auto_ptr_ref प्रलेखन कहते हैं
यह एक निश्चित वर्ग है जो स्वत: वस्तुओं को पारित करने के लिए और फ़ंक्शन से लौट आए।
क्या कोई यह बता सकता है कि यह कैसे हासिल करने में Auto_ptr_ref मदद करता है। मैं सिर्फ auto_ptr वर्ग और इसके आंतरिक समझना चाहता हूं
यह बल्कि भ्रमित है असल में, auto_ptr_ref
मौजूद है क्योंकि auto_ptr
कॉपी कन्स्ट्रक्टर वास्तव में शब्द के मानक अर्थ में एक प्रतिलिपि निर्माता नहीं है।
प्रतिलिपि कंसल्टेंट्स में आमतौर पर हस्ताक्षर जो इस तरह दिखता है:
एक्स (कॉन्स्ट एक्स एंड बी);
auto_ptr
कॉपी कन्स्ट्रस्ट्रक्टर के पास ऐसे हस्ताक्षर हैं जो इस तरह दिखता है:
एक्स (एक्स एंड बी)
इसका कारण यह है कि auto_ptr
को auto_ptr
के स्वामित्व शब्दों की सुविधा के लिए अपने सूचक को 0 में सेट करने के लिए वस्तु की प्रतिलिपि बनाने की आवश्यकता है।
कभी-कभी, अस्थायी प्रतिलिपि कन्स्ट्रक्टर से मिलान नहीं कर सकते जो कि इसके तर्क को const
घोषित नहीं करता है यह वह जगह है जहां auto_ptr_ref
आता है। संकलक प्रतिलिपि कन्स्ट्रक्टर के गैर-कॉन्स्ट संस्करण को कॉल करने में सक्षम नहीं होगा, लेकिन वह रूपांतरण ऑपरेटर को कॉल कर सकता है। रूपांतरण ऑपरेटर एक auto_ptr_ref
ऑब्जेक्ट बनाता है जो सूचक के लिए एक अस्थायी धारक की तरह है। auto_ptr
कंस्ट्रक्टर या ऑपरेटर =
को auto_ptr_ref
तर्क के साथ कहा जाता है।
यदि आप नोटिस करते हैं, तो < कोड> auto_ptr जो स्वतः auto_ptr_ref
में परिवर्तित हो जाता है auto_ptr
करता है, बस कॉपी निर्माता की तरह। < / P>
यह एक अजीब सा नृत्य है जिस पर पर्दे के पीछे होता है क्योंकि auto_ptr
से कॉपी किया जा रहा बात को संशोधित करता है।
सी ++ 0x के बारे में यादृच्छिक संबंधित टेंगेट Unique_ptr
सी ++ 0x, auto_ptr
में unique_ptr
के पक्ष में बहिष्कृत किया गया है। unique_ptr
भी प्रतिलिपि कन्स्ट्रक्टर नहीं है और नए 'चालन निर्माता' का उपयोग करता है जो कि इस तथ्य के बारे में स्पष्ट है कि यह उस वस्तु को संशोधित करेगा जिसमें उसे स्थानांतरित किया जायेगा और इसे छोड़ दिया जाएगा एक बेकार (लेकिन अभी भी मान्य) राज्य अस्थायी (उर्फ रैवल्यूज़) स्पष्ट रूप से हमेशा एक चालन निर्माता के लिए तर्क होने की अनुमति दी जाती है।
चालन निर्माता C ++ 0x में कई अन्य बड़े लाभ हैं यह मानक एसटीएल कंटेनरों को unique_ptr
को संग्रहीत करने और सही काम करने में सक्षम बनाता है, जैसा कि कैसे auto_ptr
s नहीं हो सकता। यह भी 'स्वैप' फ़ंक्शन की आवश्यकता को समाप्त कर देता है क्योंकि स्वैप फ़ंक्शन का पूरा उद्देश्य आम तौर पर एक चालक कंसट्रक्टर या असाइनमेंट ऑपरेटर को स्थानांतरित करता है जो कभी भी फेंकता है।
कौन सी दूसरी उम्मीद है चालन निर्माता और कदम असाइनमेंट ऑपरेटर (जितना नाशक की तरह) को कभी नहीं फेंकना चाहिए।
Comments
Post a Comment