- क्या Auto_ptr को आने वाले C ++ मानक में अपदस्थ किया जाएगा?
- क्या यूनिक_ टीपी को शेयर ट्रांसफर के बजाय स्वामित्व हस्तांतरण के लिए इस्तेमाल किया जाना चाहिए?
- यदि Unique_ptr मानक में नहीं है, तो क्या मुझे इसके बजाय साझा_ptr का उपयोग करने की आवश्यकता है?
जवाबों:
अद्यतन: यह उत्तर २०१० में लिखा गया था और जैसा कि प्रत्याशित std::auto_ptr
किया गया है। सलाह पूरी तरह से मान्य है।
C ++ में 0x के std::auto_ptr
पक्ष में पदावनत किया जाएगा std::unique_ptr
। स्मार्ट पॉइंटर की पसंद आपके उपयोग के मामले और आपकी आवश्यकताओं पर निर्भर करेगी, std::unique_ptr
एकल स्वामित्व के लिए चालित शब्दार्थ के साथ जो कंटेनरों के अंदर उपयोग किया जा सकता है (चाल शब्दार्थ का उपयोग करके) और std::shared_ptr
जब स्वामित्व साझा किया जाता है।
आपको स्मार्ट पॉइंटर का उपयोग करने की कोशिश करनी चाहिए जो स्थिति को सबसे अच्छी तरह से फिट करता है, सही पॉइंटर प्रकार का चयन करने से आपके डिजाइन में अंतर्दृष्टि के साथ अन्य प्रोग्रामर प्रदान करता है।
हां, आज के रूप auto_ptr
में C ++ 0x में पदावनत किया जाएगा और आपको unique_ptr
इसके बजाय उपयोग करना चाहिए । नवीनतम ड्राफ्ट मानक (n3035) से, अनुभाग D.9
वर्ग टेम्पलेट
auto_ptr
को हटा दिया गया है। [नोट: वर्ग टेम्पलेटunique_ptr
(२०.९ १०) एक बेहतर समाधान प्रदान करता है। ध्यान दें]
जब तक मानक की पुष्टि नहीं हो जाती, तब तक यह हमेशा संभव है कि समिति इस निर्णय को संशोधित करेगी, हालांकि मुझे लगता है कि इस निर्णय के लिए संभावना नहीं है।
इतना ही नहीं auto_ptr
हटाई गई है सी ++ 11 में (D.10, पेज 1228) , यह भी हो जाएगा नष्ट कर दिया सेल्सियस के ++ उसे भावी संस्करण में :
N4190 अपनाया, और वास्तव में हटाया सी ++ सहित मानक पुस्तकालय, से (बस पदावनत नहीं) कई पुरातन बातें
auto_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
और कुछ और। वे सभी अब C ++ 17 मानक लाइब्रेरी के मसौदे से हटा दिए गए हैं और भविष्य के पोर्टेबल C ++ का हिस्सा नहीं होंगे।
इसके बारे में एक और दस्तावेज़: प्रोग्रामिंग भाषा C ++, लाइब्रेरी इवोल्यूशन वर्किंग ग्रुप - दस्तावेज़ N4190 , यदि आप अधिक जानकारी चाहते हैं।
आप auto_ptr
स्वचालित कोड का उपयोग करके किसी भी कोड को परिवर्तित कर सकते हैं , unique_ptr
इसके बजाय उपयोग करके
जब भी "कॉपी" किया जा रहा था डाला के साथ किसी भी कोड का उपयोग करके
auto_ptr
यंत्रवत् रूप से परिवर्तित किया जा सकता है ।unique_ptr
move()
auto_ptr
नहीं, यह पदावनत नहीं है। यह हो सकता है, अगर C ++ 0x कभी स्वीकार हो जाए। और यह वास्तविक रूप से हमेशा समर्थित होगा। मैं नहीं मानता कि किसी भी पदावनत विशेषता को कभी भी वास्तविक दुनिया C ++ कार्यान्वयन से हटा दिया गया है।
auto_ptr
मानक का हिस्सा है, लेकिन काफी कम उपयोग किया जाता है। एक व्यावहारिक दृष्टिकोण से, इसके निष्कासन से काफी कम प्रभाव पड़ेगा।
<iostream.h>
पहले से अधिक C ++ का उपयोग किया गया थाauto_ptr
, लेकिन MS VC ++ (एक के लिए) अब इसे प्रदान नहीं करता है।