C++ का उपयोग unique_ptr

Use C Unique_ptr



स्मार्ट पॉइंटर्स का उपयोग संसाधन को गतिशील रूप से आवंटित करने के लिए किया जाता है। C++ में विभिन्न उद्देश्यों के लिए कई प्रकार के स्मार्ट पॉइंटर्स का उपयोग किया जाता है, जैसे कि auto_ptr , अद्वितीय_ptr , तथा shared_ptr . C++ के नए संस्करण में auto_ptr सूचक को हटा दिया गया है। Unique_ptr का उपयोग auto_ptr के स्थान पर किया जाता है। इस पॉइंटर का ऑब्जेक्ट पॉइंटर का स्वामित्व ले सकता है। इस पॉइंटर का ऑब्जेक्ट पॉइंटर का विशिष्ट रूप से स्वामी होता है, और कोई अन्य पॉइंटर ऑब्जेक्ट को इंगित नहीं कर सकता है। Unique_ptr स्वचालित रूप से वस्तुओं को हटा देता है। यदि ऑब्जेक्ट नष्ट हो जाते हैं, या ऑब्जेक्ट का मान बदल जाता है या रीसेट () फ़ंक्शन कहा जाता है, तो यह पॉइंटर उन ऑब्जेक्ट्स का प्रबंधन करता है। इस ट्यूटोरियल में Unique_ptr की विशेषताओं और इस पॉइंटर के उपयोग पर चर्चा की गई है।

मुख्य अंग:







Unique_ptr ऑब्जेक्ट के दो मुख्य घटक नीचे दिए गए हैं:



ए संग्रहीत सूचक:



इसका उपयोग एक अद्वितीय सूचक द्वारा बनाई गई वस्तुओं को प्रबंधित करने के लिए किया जाता है। इसे पॉइंटर क्रिएशन के समय बनाया जाता है, और इसे अलग-अलग तरीकों से बदला जा सकता है।





बी संग्रहीत डिलीटर:

यह संग्रहीत सूचक प्रकार का तर्क लेता है जिसका उपयोग प्रबंधित ऑब्जेक्ट को हटाने के लिए किया जाता है। इसे पॉइंटर क्रिएशन के समय भी बनाया जाता है, और इसे अलग-अलग तरीकों से बदला जा सकता है।



उदाहरण 1: कंस्ट्रक्टर के साथ क्लास का पॉइंटर ऑब्जेक्ट बनाएं

किसी वर्ग की अद्वितीय सूचक वस्तुओं को घोषित करने और कक्षा की विधि तक पहुँचने का तरीका वस्तुओं का उपयोग करना है जैसा कि निम्नलिखित उदाहरण में दिखाया गया है। कोड में एक कंस्ट्रक्टर और एक सार्वजनिक विधि के साथ एक वर्ग घोषित किया गया है। कंस्ट्रक्टर के तीन तर्क हैं। कंस्ट्रक्टर को तीन तर्क मानों के साथ कॉल करके पहला अद्वितीय सूचक बनाया गया है। NS नतीजा() विधि को पॉइंटर ऑब्जेक्ट द्वारा बुलाया जाता है जो कंस्ट्रक्टर के तीन तर्क मानों के योग की गणना करता है। अगला, दूसरा अद्वितीय पॉइंटर ऑब्जेक्ट कंस्ट्रक्टर को कॉल किए बिना बनाया जाता है, और पहला पॉइंटर दूसरे पॉइंटर पर ले जाया जाता है। NS नतीजा() विधि को दूसरी सूचक वस्तु द्वारा बुलाया जाता है।

//आवश्यक पुस्तकालय शामिल करें

#शामिल

#शामिल

नेमस्पेस एसटीडी का उपयोग करना;

//कक्षा को परिभाषित करें
वर्ग जोड़{

इंट नंबर 1, नंबर 2, नंबर 3;
सह लोक:
//कंस्ट्रक्टर घोषित करें
योग(इंट ए, इंट बी, इंट सी)
{
नंबर 1 = ए;
संख्या २ = ख;
संख्या 3 = सी;
}
//गणना करने की विधि घोषित करेंयोग
इंट परिणाम()
{
वापसीनंबर 1 + नंबर 2 + नंबर 3;
}
};
मुख्य प्रवेश बिंदु()
{
//पहला पॉइंटर घोषित करें
Unique_ptr सूचक1(नया जोड़(चार पांच,55,30));

लागत<<'पहले सूचक का उपयोग कर योग का परिणाम:'<नतीजा() <<'एन';
//दूसरा पॉइंटर घोषित करें
Unique_ptr सूचक2;
//पहले पॉइंटर को दूसरे पॉइंटर पर ले जाएँ
पॉइंटर 2 = मूव(सूचक1);

लागत<<'दूसरे सूचक का उपयोग कर योग का परिणाम:'<नतीजा() <<'एन';
वापसी0;
}

आउटपुट:

उपरोक्त कोड को निष्पादित करने के बाद निम्न आउटपुट दिखाई देगा। ४५, ५५, और ३० का योग १३० है जो दोनों बिंदुओं के लिए मुद्रित किया गया है।

उदाहरण 2: कंस्ट्रक्टर और डिस्ट्रक्टर के साथ क्लास का पॉइंटर ऑब्जेक्ट बनाएं

निम्नलिखित उदाहरण में कंस्ट्रक्टर और डिस्ट्रक्टर वाले वर्ग के एक अद्वितीय पॉइंटर ऑब्जेक्ट को घोषित करने का तरीका दिखाया गया है। क्लास में एक तर्क के साथ एक कंस्ट्रक्टर होता है, क्लास वेरिएबल के मान के लिए डिस्प्ले () नामक एक सार्वजनिक विधि, और एक डिस्ट्रक्टर जो क्लास की वस्तु को नष्ट करने से पहले एक नष्ट संदेश को प्रिंट करेगा। कोड में यूनिक पॉइंटर ऑब्जेक्ट बनाने के बाद डिस्प्ले () मेथड को कॉल किया जाता है।

//आवश्यक पुस्तकालय शामिल करें

#शामिल

#शामिल

नेमस्पेस एसटीडी का उपयोग करना;

//कक्षा को परिभाषित करें
वर्ग ग्राहक
{
स्ट्रिंग नाम;

सह लोक:
//कंस्ट्रक्टर घोषित करें
ग्राहक(स्ट्रिंग संख्या)
{
नाम = एन;
लागत<<'संसाधन आवंटित किया गया है।एन';
}

//ग्राहक का नाम प्रिंट करने की विधि घोषित करें
शून्य प्रदर्शन()
{
लागत<<'ग्राहक का नाम है:'<<नाम<<'एन';
}

//विनाशक घोषित करें
~ग्राहक()
{
लागत<<'संसाधन नष्ट हो गया है।एन';
}
};
मुख्य प्रवेश बिंदु()
{
//उस संसाधन ऑब्जेक्ट को आवंटित करें जिसका स्वामित्व unique_ptr . के पास है
Unique_ptruPointer{नए ग्राहक('मीर अब्बास') };
यूपॉइंटर->प्रदर्शन();
वापसी0;
}

आउटपुट:

उपरोक्त कोड को निष्पादित करने के बाद निम्न आउटपुट दिखाई देगा:

उदाहरण 3: स्वामित्व स्थानांतरित करने के बाद सूचक की जाँच करें

अद्वितीय पॉइंटर के स्वामित्व की जांच करने का तरीका निम्न उदाहरण में एक वर्ग के दो अद्वितीय पॉइंटर्स बनाकर दिखाया गया है। कोड में दो स्ट्रिंग वेरिएबल और एक सार्वजनिक विधि वाला एक वर्ग घोषित किया गया है। क्लास का पहला यूनिक पॉइंटर ऑब्जेक्ट बनाने के बाद क्लास की Book_details () मेथड को कॉल किया जाता है। अगला, दूसरा अद्वितीय पॉइंटर ऑब्जेक्ट बनाया गया है, और पहला पॉइंटर दूसरे पॉइंटर पर ले जाया गया है जो पहले पॉइंटर को नष्ट कर देता है। दोनों पॉइंटर्स के स्वामित्व की बाद में जाँच की जानी चाहिए।

//आवश्यक पुस्तकालय शामिल करें

#शामिल

#शामिल

नेमस्पेस एसटीडी का उपयोग करना;

//कक्षा को परिभाषित करें
कक्षा की किताब{

स्ट्रिंग शीर्षक ='सी++ प्रोग्रामिंग लैंग्वेज';
स्ट्रिंग लेखक ='बजर्न स्ट्रॉस्ट्रुप';

सह लोक:
//पुस्तक विवरण मुद्रित करने की विधि घोषित करें
शून्यपुस्तिका_विवरण()
{
लागत<<'पुस्तक का नाम:'<<शीर्षक<<'एन';
लागत<<'लेखक का नाम: '<<लेखक<<'एन';
}
};
मुख्य प्रवेश बिंदु()
{
//पहला पॉइंटर घोषित करें
Unique_ptr सूचक1(नयी पुस्तक());

सूचक1->Book_details();
//दूसरा पॉइंटर घोषित करें
Unique_ptr सूचक2;
//पहले पॉइंटर को दूसरे पॉइंटर पर ले जाएँ
पॉइंटर 2 = मूव(सूचक1);

//पहले सूचक की जाँच करें
अगर (स्थिर_कास्ट(सूचक1))लागत<<'पहला सूचक शून्य नहीं है'एन';
एल्सकॉउट<<'पहला सूचक शून्य है'एन';
//दूसरा सूचक जांचें
अगर (स्थिर_कास्ट(सूचक २))लागत<<'दूसरा सूचक शून्य नहीं है'एन';
एल्सकॉउट<<'दूसरा सूचक शून्य है'एन';

वापसी0;
}

आउटपुट:

उपरोक्त कोड को निष्पादित करने के बाद निम्न आउटपुट दिखाई देगा। आउटपुट के अनुसार, पहले पॉइंटर का स्वामित्व हटा दिया गया था, और संदेश, पहला सूचक शून्य है पहले सूचक के लिए मुद्रित किया गया है। दूसरे सूचक का स्वामित्व मौजूद है, और संदेश, पहला सूचक शून्य नहीं है दूसरे सूचक के लिए मुद्रित किया गया है:

निष्कर्ष:

इस ट्यूटोरियल में कई उदाहरणों का उपयोग करके C++ प्रोग्रामिंग में एक अद्वितीय पॉइंटर का उपयोग करने के उद्देश्यों का वर्णन किया गया है। अद्वितीय पॉइंटर बनाने, पॉइंटर के स्वामित्व को स्थानांतरित करने और पॉइंटर के वर्तमान स्वामित्व की जांच करने के तरीकों को यहां समझाया गया है ताकि पाठकों को अद्वितीय पॉइंटर के उपयोग को ठीक से जानने में मदद मिल सके।