Smart Pointers in C++ Explained in Hindi | Coding Example | C++ Interview

MySirG.com5,149 words

Full Transcript

हेलो फ्रेंड्स बहुत-बहुत स्वागत है आपका mysirg.com के इस चैनल पर मैं हूं आपका दोस्त इंस्ट्रक्टर सौरभ शुक्ला आज हम देखने वाले हैं सी प प् में एक कांसेप्ट जिसका नाम है स्मार्ट पॉइंटर तो आइए शुरुआत करते हैं बिना देरी के साथ कि स्मार्ट पॉइंटर क्या होता [संगीत] है तो सबसे पहले तो मैं आपको बता दूं यह जो स्मार्ट पॉइंटर है यह एक नया कांसेप्ट है जो कि सी प् प में शुरुआत से नहीं था सी प् प् जब नी थी तब उसमें बहुत लिमिटेड फीचर्स थे जैसे-जैसे c+ प में नए-नए वर्जंस आते गए वैसे-वैसे कई सारे नए कांसेप्ट जुड़ते गए ऐसे ही एक c+ प् का वर्जन आया c+ प 11 और इस वर्जन में पहली बार स्मार्ट पॉइंटर का कांसेप्ट देखा गया इसके पहले एक ऑटो पॉइंटर का भी कांसेप्ट था जिससे काफी मिलता-जुलता कांसेप्ट स्मार्ट पॉइंटर में देखा जाता है हालांकि स्मार्ट पॉइंटर ज्यादा इंप्रूव्ड वर्जन है ऑटो पॉइंटर के अब ऑटो पॉइंटर तो डिप्री केट हो चुका है तो उसकी बात करना बेकार है तो हम लोग सिर्फ बात करते हैं स्मार्ट पॉइंट्स की तो स्मार्ट पॉइंट्स बेसिकली तीन तरह के होते हैं सबसे पहले हम यूनिक पॉइंटर को देखेंगे उसके बाद शेयर्ड पॉइंटर को देखेंगे और उसके बाद हम देखेंगे वीक पॉइंटर को ये तीन पॉइंट्स के बारे में मैं आपको तीन अलग-अलग वीडियोस में एक्सप्लेन करूंगा आज की वीडियो में हम लोग देखेंगे यूनिक पॉइंटर का कांसेप्ट तो आइए शुरू करते हैं इसको तो पहले तो यह समझ ले कि स्मार्ट पॉइंट्स का बेनिफिट क्या है आप लोग इसके पहले तक डायनेमिक मेमोरी एलोकेशन का इस्तेमाल करते थे डीएमए का इस्तेमाल करते थे न्यू डिलीट जैसे ऑपरेटर्स का इस्तेमाल करते थे जिससे आप मेमोरी का एलोकेशन कर सकते हैं आप जानते हैं कि सीसी प् प्लस ऐसी प्रोग्रामिंग लैंग्वेज है जहां पर मेमोरी मैनेजमेंट प्रोग्रामर को ही करना होता है आप जानते हैं कि जो कई सारी मॉडर्न प्रोग्रामिंग लैंग्वेजेस हैं जैसे हम जावा की बात करें या पाइथन की बात करें या और भी बहुत सारी प्रोग्रामिंग लैंग्वेजेस हैं उनमें ऑटोमेटिक मेमोरी मैनेजमेंट का कांसेप्ट है और यही वजह है कि c+ प मार्केट में बहुत ज्यादा यूज में आती है क्योंकि इसमें मेमोरी को हम खुद मैनेज कर सकते हैं अब जब मेमोरी को मैनेज करने की बात आती है तो एक बहुत ही डेंजरस कांसेप्ट आता है मेमोरी लीक का अक्सर प्रोग्रामर मेमोरी लीक की गलतियां कर देते हैं यानी कोडिंग में अगर प्रोग्रामर ठीक से ध्यान ना रखे तो बहुत सारी ऐसी सिचुएशंस आ सकती हैं जिनको एनालाइज करना भी आसान नहीं है और वहां पर मेमोरी लीक हो जाती है और यह है पुअर मेमोरी मैनेजमेंट और पुअर मेमोरी मैनेजमेंट के कारण यह माना जाता है कि c+ प में उन्हीं प्रोग्रामर्स को हाथ डालना चाहिए जिनका मेमोरी मैनेजमेंट प अच्छा कमांड हो और यही वजह है कि जावा या पाइथन जैसी प्रोग्रामिंग लैंग्वेज में ऑटोमेटिक मेमोरी मैनेजमेंट का कांसेप्ट आया लेकिन जब परफॉर्मेंस की बात आती है तो मेमोरी मैनेजमेंट प्रोग्रामर को ही करना चाहिए और यही वजह है कि हम सी प् प् में प्रोग्रामिंग बहुत ज्यादा करते हैं जितनी भी बड़ी-बड़ी कंपनीज हैं जैसे मेमोरी लीक की तो यह प्रॉब्लम को अवॉइड किया जा सके इस प्रॉब्लम को दूर किया जा सके बहुत सिंपल तरीके से तो उसका कांसेप्ट स्मार्ट पॉइंटर के रूप में आपको देखने को मिलता है तो कई सारे बेनिफिट्स हैं लेकिन ओवरऑल मैं कहूं मेमोरी मैनेजमेंट से रिलेटेड ही बेनिफिट है तो यहां पर आप देख सकते हैं कि रिसोर्स मैनेजमेंट पॉइंटर बेसिकली पॉइंट कर रहा होता है किसी मेमोरी रिसोर्स को और उस रिसोर्स का बेटर मैनेजमेंट हम कर सकते हैं विद द हेल्प ऑफ स्मार्ट पॉइंट्स क् क्योंकि कई सारे पॉइंटर सेम रिसोर्स को अगर एक्सेस करते हैं तो वो शेयर्ड रिसोर्स हो जाता है और ऐसे में मेमोरी लीक होने का खतरा डांगलिंग पॉइंट्स बनने का खतरा बहुत ज्यादा रहता है तो ये चीजें दिक्कत ना दे इसके लिए स्मार्ट पॉइंटर इंट्रोड्यूस हुआ तो स्मार्ट पॉइंटर का एक बेनिफिट ये हो गया कि रिसोर्स मैनेजमेंट बहुत तरीके से हो पाता है सेफली हो पाता है यहां पर हम मेमोरी लीक्स को अवॉइड कर पाते हैं डांगलिंग पॉइंट्स की सिचुएशंस को हम अवॉइड कर पाते हैं पॉइंटर ओनरशिप की भी एक कांसेप्ट यहां पर आता है कि अगर एक पॉइंटर किसी मेमोरी रिसोर्स को पॉइंट कर रहा है तो कोई और उसको पॉइंट ना कर सके तो यह एक ओनरशिप वाला कांसेप्ट भी यहां पर इंट्रोड्यूस होता है सिंपलीफाई मेमोरी मैनेजमेंट मेमोरी मैनेजमेंट में जो बहुत सारी चीजें आपको ध्यान रखनी पड़ती थी कि भाई डिलीट कीवर्ड भी लिख दीजिए अगर आप डिलीट नहीं कराएंगे तो प्रॉब्लम हो जाएगी मेमोरी लीक हो जाएगी तो वो सारी चीजों का जो आपको ध्यान रखना पड़ता था उससे से भी आपको छुटकारा मिलेगा स्मार्ट पॉइंट्स के अंदर तो सिंपलीफाई कर दिया है मेमोरी मैनेजमेंट को अवॉइडिंग मैनुअल मेमोरी मैनेजमेंट एरर्स तो जो मेमोरी मैनेजमेंट करने में जो एरर्स हो जाती थी प्रोग्रामर से वो ना हो इसका भी इसमें प्रावधान किया गया तो इसलिए हम लोग पढ़ रहे हैं स्मार्ट पॉइंट्स अब मैं आपको यह बताना चाहता हूं कि स्मार्ट पॉइंट्स बेसिकली हम क्यों यूज करने वाले ये तो हमने थोरेट्स चलिए तो एक प्रोग्राम के जरिए हम इस चीज को समझेंगे कि स्मार्ट पॉइंटर की हमें जरूरत क्यों है तो चलिए मैं एक प्रोग्राम यहां पर लिखता हूं एक अलग ही फंक्शन बना लेते हैं हम लोग वॉइड f1 वॉइड ए f1 नाम से एक फंक्शन बना दिया मैंने और इस फंक्शन के अंदर हम लोग बनाने वाले हैं एक पॉइंटर वेरिएबल तो एक मैंने पॉइंटर वेरिएबल बनाया अभी मैं स्मार्ट पॉइंटर को यूज नहीं कर रहा हूं मैं आपको बताना चाहता हूं बिना स्मार्ट पॉइंटर के अगर हम काम करेंगे तो क्या होता है तो तो पहले तो यह मैंने एक पॉइंटर वेरिएबल बना लिया और ओबवियस सी बात है कि इसमें मैं कुछ एड्रेस रखने वाला हूं तो न्यू की मदद से मैं डायनेमिक एक वेरिएबल बना रहा हूं इंट टाइप का और इसके अंदर कुछ वैल्यू भी रख देते हैं लेट से 10 और यह हमारा पॉइंटर बनके तैयार हो चुका है और पॉइंटर में एक मेमोरी लोकेशन का एड्रेस भी आ चुका है वह मेमोरी लोकेशन इंट टाइप का वेरिएबल है जिसमें 10 वैल्यू रखी हुई है अब आप क्या करते हो कुछ कोडिंग आप कर रहे होगे इसके मैं यहां पर ऐसे लिख देता हूं सम कंडीशन ठीक है ओबवियसली यहां पर आप कुछ कंडीशन लिखने वाले हो तो कोई कंडीशन आपने यहां पर लिखी हुई है और इस कंडीशन के ट्रू होने पर ही यह कोड चलने वाला है तो यहां पर हमने लिखा है रिटर्न ठीक है अब आप एक चीज समझो अगर यह कंडीशन ट्रू होती है तो रिटर्न होगा वरना नहीं होगा अभी रिटर्न आप कुछ वैल्यू करा रहे हो नहीं करा रहे हो अभी मेरे को उससे मतलब नहीं है और यह कंडीशन खत्म हो जाने के बाद मैं यह डिलीट लिख रहा हूं अब जरा इस कोड को ध्यान से देखिए और सोचिए इसमें क्या होगा अगर ये कोड f1 फंक्शन चलता है इसके अंदर पॉइंटर वेरिएबल बनेगा गॉट इट जब ये फंक्शन में इफ कंडीशन फॉल्स हो जाती है तो रिटर्न स्टेटमेंट नहीं चलेगा मैंने ऊपर वॉइड लिखा हुआ है मुझे रिटर्न लिख रहा हूं तो मैं यहां पर कुछ वैल्यू करवा देता हूं ठीक है सो बेसिकली यहां पर कुछ वैल्यू भी है ठीक है ऐसा सोच लो तो अगर ये कंडीशन फॉल्स हो जाती है इमेजिन करो कि यह कंडीशन फॉल्स हो जाती है तो क्या यह रिटर्न स्टेटमेंट चलेगा नहीं चलेगा ना क्योंकि यह कंडीशन फॉल्स हो गई रिटर्न स्टेटमेंट नहीं चलेगा और फिर नीचे आके डिलीट प वाली लाइन चल जाएगी डिलीट प से क्या होगा ओबवियसली आप जानते हैं प डिलीट नहीं हो रहा है प जिसको पॉइंट कर रहा है वो डिलीट हो रहा है तो आपने लाइन नंबर सिक्स में जो मेमोरी ब्लॉक बनाया हुआ है जिसको पी पॉइंट कर रहा है व मेमोरी ब्लॉक डिलीट हो जाएगा डिलीट के कारण डिलीट कीवर्ड के कारण लेकिन यह तो सब ठीक दिख रहा है यह फंक्शन एंड हो जाएगा फंक्शन एंड हो जाएगा तो p भी डिस्ट्रॉय हो जाएगा पर मान लो ऐसा हुआ कि f1 फंक्शन चलता है और इफ कंडीशन ट्रू हो जाती है तो फिर रिटर्न स्टेटमेंट चलेगा रिटर्न स्टेटमेंट चलेगा तो क्या होता है f1 फंक्शन उसी वक्त एंड हो जाएगा अब सोचिए f1 फंक्शन अगर उसी वक्त एंड हो जाएगा तो क्या डिलीट p वाली लाइन चल पाई नहीं डिलीट प वाली लाइन चलने से पहले ही रिटर्न हो चुका है ओके तो फिर क्या होगा डिलीट प नहीं होगा मतलब कि p जिस ब्लॉक को पॉइंट कर रहा है वो रिलीज नहीं होगा उसकी मेमोरी रिलीज नहीं होगी ठीक है फंक्शन एंड हो चुका है पी डिस्ट्रॉय हो जाएगा फंक्शन एंड होगा तो p डिस्ट्रॉय होगा पर p जिसको पॉइंट कर रहा है वो डिस्ट्रॉय नहीं होगा ट मींस मेमोरी लीक हो गई आ यू गेटिंग माय पॉइंट मेमोरी लीक हो गई सो यही चीज को मैं यहां पर अभी समझाता हूं आपको कि जब हमने बनाया पी पॉइंटर तो पी पॉइंटर पॉइंट कर रहा है एक मेमोरी ब्लॉक को जिसके अंदर 10 रखा हुआ है ठीक है यह इस लाइन की वजह से हो गया और उस के बाद अगर ये कंडीशन ट्रू हो जाती है तो रिटर्न स्टेटमेंट चल जाता है रिटर्न के कारण कंट्रोल बैक चला गया जहां से फंक्शन कॉल हुआ था ठीक है अभी आप इसको इंट मान लीजिए और यहां पर कुछ वैल्यू भी हो सकती है लेकिन उसके बाद यह वाली लाइन नहीं चल पाई फंक्शन हमारा एंड हो चुका है फंक्शन एंड हो चुका है तो ये लोकल वेरिएबल है ना p ये डिस्ट्रॉय हो गया पर ये जो है यह तो मेमोरी लीक हो गया ना क्योंकि इसको अब ना तो कोई पॉइंट कर पा रहा है और ना इसकी मेमोरी लीज हुई अब आपको यह बात अच्छी तरीके समझ में आ चुकी है कि मेमोरी लीक ऐसे हो जाती है अब इस मेमोरी लीक से हमें बचना है तो हमें क्या करना होगा तो हम यहां पर यूज करेंगे स्मार्ट पॉइंटर का अब जैसे कि मैंने बताया स्मार्ट पॉइंटर हमारे पास तीन तरह के होते हैं स्मार्ट पॉइंटर में सबसे पहला है यूनिक पॉइंटर जो आज हमको पढ़ना है और उसी के बारे में मैं अभी आपको बता रहा हूं तो मैं यहां पर क्या करने वाला हूं नॉर्मल पॉइंटर बनाने की बजाय मैं यूनिक पॉइंटर बनाऊंगा यूनिक पॉइंटर इ स्मार्ट पॉइंटर ठीक है तो उसको कैसे बनाते उसके लिए आप यहां लिखिए यूनिक और अंडरस्कोर लगाइए और पीटीआर लिखिए ठीक है अब आपने सी प्स प्लस में टेंपलेट्स का कांसेप्ट पढ़ा होगा जेनरिक प्रोग्रामिंग का कांसेप्ट पढ़ा होगा तो टेंपलेट्स की मदद से यह यूनिक पीटीआर बना है और इसलिए मैं बोल रहा हूं कि यह क्लास है तो आप अगर जानते हैं टेंपलेट्स तो आपको पता होगा कि जब हम क्लास टेंप्लेट का ऑब्जेक्ट बनाते हैं तो आपको टाइप एज अ पैरामीटर पास करना होता है एंगुलर ब्रैकेट में वही मैं करने जा रहा हूं तो मैंने एंगुलर ब्रैकेट में यहां पर टाइप पास किया इंट तो मैं यह कहना चाह रहा हूं कि यह जो पॉइंटर मैं बना रहा हूं और यहां स्टार लगाने की जरूरत नहीं है एस्टिक लगाने की जरूरत नहीं है आप सिंपली p लिखिए तो प एक पॉइंटर है कैसा पॉइंटर है यूनिक पॉइंटर है यह बेसिकली यूनिक पॉइंटर क्लास का ऑब्जेक्ट है प पर वह बिहेव करता है एस अ पॉइंटर हाउ एक्चुअल में आप क्या करने वाले हो इसका कंस्ट्रक्टर कॉल करने वाले हो मतलब कंस्ट्रक्टर कॉल हो ग ही जब ऑब्जेक्ट बनेगा और उस कंस्ट्रक्टर में आप आर्गुमेंट के रूप में पास कर देने वाले हो क्या न्यू इंट 10 मतलब आप नए एक नया ऑब्जेक्ट या नया वेरिएबल बना रहे हो इंट टाइप का उसमें 10 रख रहे हो और उसका एड्रेस पास कर दे रहे हो इस कंस्ट्रक्टर में सो बेसिकली यूनिक पीटीआर एक क्लास है टेंप्लेट क्लास है उसके अंदर एक पॉइंटर है रॉ पॉइंटर उसके अंदर है तो अभी जो आप इसके पहले प्रोग्राम बना रहे थे और आपने एक पॉइंटर वेरिएबल बनाया आया था जो इस डायनेमिक क्रिएटेडॉक्युमेंट्सफ्रैगमेंट यूनिक पीटीआर का ऑब्जेक्ट है जो कंटेन कर रहा है रॉ पॉइंटर वो रॉ पॉइंटर पॉइंट कर रहा है इस इंट टाइप के वेरिएबल को जिसके अंदर 10 रखा हुआ है ठीक है अब इससे हमारी प्रॉब्लम सॉल्व कैसे हुई इसको समझते हैं इसके बाद हमने सेम हमारा कोड वैसे ही का वैसा लिखा हुआ है लेकिन अब डिलीट प लिखने की मुझे जरूरत नहीं है देखिए यह एक बड़ी बात हो गई हमें डिलीट प लिखने की जरूरत नहीं है तो जो मेमोरी मैनेजमेंट में मिस्टेक्स हो जाते कि हम डिलीट लिखना भूल गए या जैसा अभी हमने कोड लिखा था डिलीट चल नहीं पाया क्योंकि पहले ही रिटर्न हो गया तो मेमोरी लीक हो रही थी अब वह सिचुएशन नहीं आएगी क्योंकि आप यूनिक पीटीआर का इस्तेमाल कर रहे हो यूनिक पीटीआर यह इंश्योर करता है कि आपको डिलीट करने की जरूरत नहीं वह खुद डिलीट कर देगा कब लेकिन जब यह पी पी यूनिक पीटीआर का ऑब्जेक्ट कंटेन कर रहा है एक रॉ पॉइंटर जो किसी मेमोरी लोकेशन को पॉइंट कर रहा है अब अगर यह प डिस्ट्रॉय हो जाए प कब डिस्ट्रॉय होगा प यूनिक पीटीआर का ऑब्जेक्ट ये कब डिस्ट्रॉय होगा जब ये फंक्शन एंड होगा क्योंकि फंक्शन एंड होगा तो सारे लोकल वेरिएबल अपने आप डिस्ट्रॉय हो जाते हैं तो ये जो p एंड होगा प डिस्ट्रॉय होगा तो ऑटोमेटिक p के अंदर बैठा रॉ पॉइंटर जिस इंट वेरिएबल को पॉइंट कर रहा उसकी मेमोरी भी रिलीज हो जाएगी जो आपको करवाना होता था वह अब अपने आप हो जाएगा तो देखा जाए तो पी जब डिस्ट्रॉय होगा तो यूनिक पीटीआर में डिस्ट्रक्टर चलेगा यूनिक पीटीआर एक क्लास है ना उसमें डिस्ट्रक्टर बना होगा ना वो चलेगा जब प डिस्ट्रॉय होगा तो यूनिक पीटीआर का ऑब्जेक्ट डिस्ट्रॉय हो रहा है तो उसके पहले डिस्ट्रक्टर चलना है उस डिस्ट्रक्टर में यह कोडिंग लिखी होगी कि जो रॉ पॉइंटर प के अंदर है वो जिसको पॉइंट कर कर रहा है उसकी मेमोरी को रिलीज करो तो आपको अलग से डिलीट नहीं लिखना पड़ा यह अपने आप मेमोरी को रिलीज कर दे रहा है तो एक तो यह जो मेमोरी लीक का खतरा था वह खत्म हो गया सिंपल अब रिटर्न चलता है या नहीं चलता है दोनों सूरत में जब पी डिस्ट्रॉय होगा तो यूनिक पीटीआर जिस मेमोरी लोकेशन को जिस रिसोर्स को पॉइंट कर रहा था वो भी रिलीज हो जाएगा सो दिस इज द बेनिफिट ऑफ स्मार्ट पॉइंटर जिसकी वजह से मेमोरी मैनेजमेंट बहुत आसान हो गया सिंपलीफाइड हो गया और अगर आप इनका यूज करते हैं तो आपके प्रोग्राम में मेमोरी से रिलेटेड एरर्स आने के चांसेस खत्म हो जाएंगे यूनिक पीटीआर के बारे में और थोड़ा डिटेल में हम लोग समझते हैं लेकिन आई थिंक यह कांसेप्ट आपको अभी क्लियर होगा सो चलिए इसको एक बार थोड़ा डायग्राम से भी समझते हैं कि हमने क्या बात करी हमने य बात करी कि आपके पास एक प नाम का ऑब्जेक्ट है जो कि यूनिक पीटीआर का ऑब्जेक्ट है इसके अंदर एक रॉ पॉइंटर होगा आप कुछ भी नाम सोच लीजिए पीटीआर सोच लीजिए जो कि पॉइंट कर रहा होगा एक इंट टाइप के वेरिएबल का जिसके अंदर 10 रखा है अच्छा देखो यह कोई जरूरी नहीं कि हमेशा मुझे इंट टाइप का ही वेरिएबल बनाना है यह तो आपको डिसाइड करना है आप किसी भी क्लास के ऑब्जेक्ट का एड्रेस इसमें रख सकते हैं उसके लिए आपको सिर्फ क्या करना है यूनिक पीटीआर का जब पॉइंटर बना रहे हैं या ऑब्जेक्ट बना रहे हैं तब यहां एंगुलर ब्रैकेट में आप टाइप बताइए कि किस टाइप के रिसोर्स को पॉइंट करना चाहता है यह यूनिक पॉइंटर तो अभी मैंने इंट लिखा हुआ है आप कुछ और भी लिख सकते हैं कोई क्लास टाइप लिख सकते हैं तो यह इस तरीके से हमने यूनिक पीटीआर बना लिया और यह इसके कारण हो रहा है तो प इज यूनिक पीटीआर जिसके अंदर रॉ पॉइंटर है जो पॉइंट कर रहा है 10 को ठीक अब यहां पर यह कंडीशन चले या ना चले रिटर्न हो या ना हो ठीक है जब यह फंक्शन एंड होगा चाहे वो रिटर्न चलने के कारण एंड हो रहा हो चाहे यह फंक्शन की सारी लाइंस खत्म हो गई है इसलिए एंड हो रहा हो यह फंक्शन जब एंड होगा तो इसके अंदर बैठा लोकल वेरिएबल यानी प ऑब्जेक्ट ये डिस्ट्रॉय होगा ये डिस्ट्रॉय होगा तो इसका डिस्ट्रक्टर चलेगा इसका डिस्ट्रक्टर चलेगा तो वो डिस्ट्रक्टर का काम है कि पीटीआर जिसको पॉइंट कर रहा है उसकी मेमोरी को रिलीज कर दो परफेक्ट यह हो रहा है यहां पर तो यूनिक पीटीआर डिलीट्स द ऑब्जेक्ट व्हेन द यूनिक पीटीआर ऑब्जेक्ट इज डिलीटेड जब पी डिलीट हो रहा है तो ये भी डिलीट हो जाएगा सिंपल आई होप आपको बात समझ में आ गई होगी चलिए अब हम लोग थोड़ी सी और बात करते हैं यूनिक पीटीआर के बारे में यूनिक पीटीआर का जब आप ऑब्जेक्ट बना रहे हो तो एक तरीका यह लाइन तो अभी आपने देखी कि इस तरीके से आप बना सकते हो आपने ऑब्जेक्ट बनाया और उसमें आपने एज एन आर्गुमेंट ये ये ऑब्जेक्ट बना के या वेरिएबल बना के डायनेमिक उसका एड्रेस पास कर दिया दूसरा तरीका हमारे पास क्या है जब यूनिक पीटीआर का आप ऑब्जेक्ट बना रहे हो यूनिक पीटीआर प बना रहे हो उस समय उसमें कुछ भी असाइन नहीं किया बिल्कुल पॉसिबल है ऐसे सूरत में यह जो प बनेगा इसके अंदर का जो रॉ पॉइंटर है वो नल कंटेन कर रहा होगा ठीक है क्या कंटेन कर रहा होगा नल और आप उसके अंदर बाद में किसी ऑब्जेक्ट का एड्रेस रखना चाहते हो तो रख सकते हो आपको लिखना है p डॉट रिसेट ठीक है यानी कि यूनिक पीटीआर क्लास में एक फंक्शन है रिसेट जिसको यूनिक पीटीआर का ऑब्जेक्ट कॉल कर सकता है तो प डॉट रिसेट और उसमें आप यह नया ऑब्जेक्ट या नया वेरिएबल डायनेमिक बना के पास कर सकते हो तो यह रिसेट फंक्शन किस तरीके से काम करता है रिसेट फंक्शन में आप आर्गुमेंट नहीं पास करो ऐसा मुमकिन है आर्गुमेंट पास करो यह भी पॉसिबल है रिसेट फंक्शन क्या करेगा अगर आप कोई आर्गुमेंट पास नहीं कर रहे ठीक है और प के अंदर जो पीटीआर है मान लो वह किसी को पॉइंट कर रहा था तो रिसेट क्या करेगा इसकी मेमोरी को रिलीज करेगा इसमें नल रख देगा यह रिसेट का काम लेकिन अगर रिसेट में मैंने यह पास कर दिया न्यू इन 10 इस तरीके से कुछ तो क्या होगा यह जो प है इसके अंदर जो प है यह अब इस नए वेरिएबल को पॉइंट करने लगेगा जिसमें 10 है अच्छा क्या होगा अगर इस पी के अंदर जो पीटीआर है उसमें ऑलरेडी नल रखा हुआ है और आपने कॉल कर लिया है प डॉट रिसेट और इसमें कोई आर्गुमेंट पास नहीं किया कुछ भी नहीं होगा ठीक है क्योंकि इसमें ऑलरेडी नल है तो वो कुछ भी नहीं करेगा तो सेफ है तो आप जब पी डॉट रिसेट करते हैं तो रिसेट फंक्शन दो पर्पस से यूज हो जाता है जब मैं उस मेमोरी को एक्सप्लीसिटली रिलीज करवाना चाहता हूं जिसको यूनिक पीटीआर पॉइंट कर रहा है तो मैं रिसेट कर सकता हूं दूसरा यदि मैं कुछ नया ऑब्जेक्ट या नया वेरिएबल बनाकर उसे मैं रखना चाहता हूं यूनिक पीटीआर में तो मैं कर सकता हूं तो इसमें भी मेमोरी लीक नहीं होता क्योंकि अगर यूनिक पीटीआर पॉइंट कर रहा है किसी लोकेशन को किसी रिसोर्स को और आपने रिसेट को कॉल कर लिया है तो पहले वह इसकी मेमोरी को रिलीज करेगा और फिर आपने अगर इसमें कुछ पास भी किया था तो वह उसके बाद उसको क्रिएट करेगा और पीटीआर अब उसको पॉइंट करने लगेगा तो यह मेमोरी लीक नहीं होता यहां यह अच्छी बात है ठीक है अब यूनिक पीटीआर के बारे में कुछ की पॉइंट्स आप लोगों को ध्यान में रखने हैं सबसे पहला अ यूनिक पीटीआर इज अ कंटेनर फॉर अ रॉ पॉइंटर हमें समझ में आ गया यूनिक पीटीआर का जो ऑब्जेक्ट बनाते हैं उसके अंदर होता है वह पॉइंटर जो पॉइंट कर रहा है हमने एक पॉइंटर के ऊपर एक कवरिंग कर दी है और उसको सिक्योर कर दिया उसको ज्यादा सेफ बना दिया उसका यूज करना बहुत सेफ कर दिया है प्रोग्रामर के लिए यूनिक पीटीआर एक्सप्लीसिटली प्रीवेंट्स कॉपिंग ऑफ इट्स कंटेंड पॉइंटर अभी देखो यूनिक पीटीआर को यूनिक पीटीआर क्यों बोलते हैं यूनिकनेक्ट भी रिसोर्स है जैसे एंटर टाइप का वेरिएबल था ना हमने बनाया अभी उसमें 10 रखा है तो यह हमारा पॉइंटर यूनिक पीटीआर उसके अंदर पीटीआर है ठीक है और वो इसको पॉइंट कर रहा है ठीक अब आपने सोचा कि एक और पॉइंटर बना ले ठीक है और वह पॉइंटर वो पॉइंटर पॉइंट करने लग जाए इसको तो नो दिस इज नॉट पॉसिबल इस रिसोर्स को अगर एक यूनिक पीटीआर पॉइंट कर रहा है तो कोई और इसको पॉइंट नहीं करेगा यानी कि यह कंफर्म है कि इस मेमोरी लोकेशन को सिर्फ और सिर्फ एक ही पॉइंटर पॉइंट कर सकता है तो यूनिक पीटीआर एक्सप्लीसिटली प्रीवेंट्स कॉपिंग ऑफ इट्स कंटेंड पॉइंटर यानी कि यह जो पी के अंदर पीटीआर है इस पॉइंटर में एड्रेस रखा है इसकी कॉपी नहीं होगी मतलब ऐसा नहीं होगा कि किसी और पीटीआर में आप यह डाटा कॉपी कर दो और यह दोनों एक ही लोकेशन को पॉइंट करने लग जाए नो दिस इज नॉट पॉसिबल क्योंकि इस पॉइंटर का पीटीआर का डाटा कॉपी नहीं होगा इसके अंदर जो एड्रेस रखा है वह कॉपी नहीं हो सकता इसको प्रिवेंट करता है यूनिक पीटीआर ठीक है हालांकि अगर आपको ऐसा करना है तो यह तो मुमकिन नहीं है कि दो पॉइंटर दो यूनिक पीटीआर एक ही रिसोर्स को पॉइंट करें यह तो पॉसिबल नहीं है लेकिन आप ओनरशिप को ट्रांसफर कर सकते हो मतलब अगर मेरे पास एक यूनिक पीटीआर है p1 मतलब यूनिक पॉइंटर है p1 और उसके अंदर कोई पीटीआर है जो किसी लोकेशन को पॉइंट कर रहा है ठीक है अब आपने एक और यूनिक पीटीआर बना दिया p2 आप यह चाहते हो अभी आपको मालूम है ना कि यह जो मेमोरी रिसोर्स है ठीक है इसको कौन ऑन कर रहा है पव ऑन कर रहा है पीव वो यूनिक पीटीआर है जो इस मेमोरी रिसोर्स को ऑन कर रहा है तो ओनरशिप किसके पास है p1 के पास है अब ओनरशिप को हम ट्रांसफर करना चाहते हैं कि p1 ओनर ना रहे अब रिसोर्स का प2 इसका ओनर हो जाए यह हम चाहते हैं तो देखो यहां पे आप क्या नहीं कर सकते हो आपने सोचा p2 असाइन p1 कर दें नहीं चलेगा क्यों क्योंकि इस क्लास के लिए यूनिक पीटीआर के लिए असाइनमेंट ऑपरेटर वर्क नहीं करता है ठीक है असाइनमेंट ऑपरेटर इसको कॉपी असाइनमेंट ऑपरेटर बोलते हैं बाय डिफॉल्ट सभी क्लासेस में ये वर्क करता है बट यूनिक पीटीआर में वर्क नहीं करता इसलिए आप ऐसा नहीं कर सकते दूसरी चीज कॉपी कंस्ट्रक्टर इसमें वर्क नहीं करता है तो आप ये सोचो कि जब मैं p2 को क्रिएट कर रहा होगा उसी वक्त p1 से इनिश इइ कर दूंगा तो कॉपी कंस्ट्रक्टर चलता है वो भी नहीं चलेगा तो ना तो यहां कॉपी असाइनमेंट ऑपरेटर मिलेगा ना कॉपी कंस्ट्रक्टर मिलेगा तो इस तरीके से तो ये कॉपी होगा ही नहीं गॉट इट अब आप चाहते यह हो कि ओनरशिप ट्रांसफर कर दें क्योंकि ऐसा तो पॉसिबल ही नहीं है कि दो पॉइंटर सेम रिसोर्स को पॉइंट कर ले यह तो पॉसिबल ही नहीं है तभी तो यूनिक पॉइंटर बोलते हैं इसको लेकिन आप चाहते हो कि ओनरशिप एक समय में एक ही के पास रहेगी अभी p1 के पास है इस रिसोर्स की ओनरशिप मैं चाहता हूं कि यह p2 को ट्रांसफर कर दी जाए तो हम यूज करेंगे मूव नाम का एक फंशन मूव फंक्शन की मदद से ये कर सकते हैं हमने सिंपली मूव को कॉल करना है उसके अंदर p1 लिखना है और जो ओनरशिप है वो p2 को ट्रांसफर इस तरीके से कर दी जाएगी उससे ये होगा कि p1 अब उस रिसोर्स को पॉइंट नहीं करेगा क्योंकि एक ही कोई पॉइंट कर सकता है तो ओनरशिप उसने ट्रांसफर कर दी अब प2 का जो पीटीआर है वो पॉइंट कर रहा है पर p1 का पीटीआर पॉइंट नहीं कर रहा तो पीव के पीटीआर में क्या आ जाएगा नल आ जाएगा ठीक है तो ये ऑटोमेटिक नल असाइन होना यह भी हमें टेंशन नहीं लेना है वो अपने आप हो जाता है सो ये कांसेप्ट इसके अंदर है का नो सपोर्ट ऑफ कॉपी कंस्ट्रक्टर एंड कॉपी असाइनमेंट ऑपरेटर एंड यूनिक पीटीआर इज अ टेंप्लेट यह सारी बातें हम लोग डिस्कस कर चुके हैं आई होप आप लोगों को अच्छे से समझ में आ गया होगा कि यह क्या होता है अभी मूव का मैं एक एग्जांपल आपको करके बता देता हूं कि क्या है है ना तो वोह और चीज आपको समझ में आ जाएगी तो जैसे यह पहली लाइन हमने लिखी रखी है तो यह तो ठीक है बस इसका नाम चेंज करके कर दो ठीक है और इसको भी हटा देते हैं इसको भी हटा देते हैं क्योंकि वो कांसेप्ट तो आपको समझ में आ ही चुका है यहां पे मैं एक और यूनिक पीटीआर बना रहा हूं यूनिक अ यूनिक पीटीआर ठीक है और ये भी इंट मैं इंट ले रहा हूं पर आप किसी भी टाइप का ऑब्जेक्ट ले सकते हैं ये p2 बना दिया मैंने और p2 में अभी मैंने कुछ भी असाइन नहीं करा तो अगर मैं इस समय जानना चाहता हूं कि p1 में क्या है मैंने लिखा सिंपली सी आउट और मैं लिखता हूं स्टार p1 अच्छा स्टार p1 लिख रहे हो तो ऐसा लग रहा है ना कि यार p1 तो पॉइंटर है जबकि p1 तो यूनिक पीटीआर का ऑब्जेक्ट है बट मैं आपको बताऊं बिकॉज ऑफ ऑपरेटर ओवरलोडिंग यूनिक पीटीआर क्लास के अंदर बहुत सारे ऑपरेटर्स की ओवरलोडिंग हो रखी है जैसे डी रेफरेंसिंग ऑपरेटर की या एरो ऑपरेटर की तो वो सारे कन्वेंशन जो आप एक पॉइंटर के साथ यूज करते थे वोह यूनिक पीटीआर के ऑब्जेक्ट के साथ भी ऐसे ही यूज कर लोगे तो आपको यही फीलिंग आएगी कि ये जो p1 है ये ऑब्जेक्ट नहीं है ये एक पॉइंटर है ऐसा लगेगा जस्ट बिकॉज ऑफ ऑपरेटर ओवरलोडिंग तो अभी मैं इसको चला के बताता हूं आपको ये f1 फंक्शन को यहां से हम कॉल कर लेते हैं ठीक है और ओके यहां पर मैं इसको कंपाइल करता हूं देखिए एक वॉर्निंग यहां पर आ रही है वॉर्निंग क्या आ रही है जरा देखें वॉर्निंग क्या आ रही है नॉन वॉइड फंक्शन रिटर्न द वैल्यू अच्छा यह मैंने इंट टाइप का लेके रखा हुआ है ना f1 को f1 को मैंने इंट टाइप का लेके रखा हुआ है इसको मैं वॉइड कर देता हूं ये वार्निंग है वैसे भी इसको आप इग्नोर भी कर सकते थे अच्छा चलिए फिर से मैं इसको करता हूं अभी कोई भी एरर नहीं है इसमें और मैं इसको अब रन करूंगा आप देख सकते हैं कि 10 प्रिंट हो रहा है स्टार p1 लिखने से 10 प्रिंट हो रहा है ओके अब मैं क्या करता हूं ये ओनरशिप को ट्रांसफर करता हूं पहले तो मैं ऐसे लिखता हूं p1 p2 असाइन p1 ऐसा लिखता हूं p2 असाइन p1 आप जानते हैं कि ये होगा कि नहीं होगा आप जानते हैं यह नहीं होगा क्योंकि असाइनमेंट ऑपरेटर वर्क नहीं करता है य मैंने कंपाइल किया देखिए एरर आ रही है क्योंकि इसमें क्या बोला है ऑब्जेक्ट ऑफ टाइप यूनिक पीटीआर कैन नॉट बी असाइन बिकॉज इट्स कॉपी असाइनमेंट ऑपरेटर इ इंपलीसिटली डिलीटेड तो उनको हटा दिया गया चलिए तो यह तो आपको समझ में आ गया कि यह नहीं हो सकता लेकिन क्या हो सकता है आप लिखिए मूव पव तो आपने ओनरशिप को ट्रांसफर कर दिया है एक ही कोई ओनर हो सकता है अब ओनर p1 नहीं है प2 है तो क्या मैं सी आउट लिखकर स्टार पव करूंगा तो कोई प्रॉब्लम आएगी स्टार पव लिख रहा हूं मतलब क्या है मैं ट्राई कर रहा हूं अभी भी p1 के द्वारा उसको एक्सेस करने की जबकि पव से तो वो हट चुका है पव अब ओनर है ही नहीं उसका तो क्या होगा आउटपुट में क्या आएगा हां आउटपुट में देखिए सेगमेंटेशन फॉल्ट एरर आ रही है सो ये क्यों आ रही है क्योंकि p1 अब ओनर नहीं है आप p2 कर दीजिए तो ये चल जाएगा p2 कर दीजिए ये देखिए 10 आ रहा है दो बार आ रहा है एक बार ऊपर भी मैंने प्रिंट करवाया हुआ है मूव के पहले p1 के द्वारा और मूव के बाद p2 के द्वारा तो ये आप कर सकते हो ठीक है आपको चेक करना है इफ पव पव इक्वल टू नल पॉइंटर तो मैं यहां पर प्रिंट करा देता हूं पव इज नॉट एन ओनर ठीक है ऐसा मैसेज आ जाएगा पव ओनर नहीं है और एल्स सी आउट स्टार प अगर पव ओनर है तो एल्स में आ जाएंगे ठीक है इसको चला के देखते हैं कंपाइल किया यह रन करता हूं देखिए पहले तो 10 प्रिंट हो गया है वह लाइन नंबर 8 के कारण प्रिंट हुआ है और फिर पव में क्योंकि नल पॉइंटर है तो हम प्रिंट करा रहे हैं p1 इज नॉट एन ओनर और उसके बाद फिर p प2 की प2 के द्वारा हम प्रिंट करा रहे हैं वैल्यू तो फिर से 10 प्रिंट रही गट इट तो अभी आपको अच्छी तरीके समझ में आ गया कि क्या होता है यूनिक पॉइंटर और रिसेट का भी मतलब आपको समझ में आ गया है तो यही था हमारा यूनिक पॉइंटर आई होप अच्छे से समझ में आया पर स्मार्ट पॉइंटर तीन तरह के होते हैं यूनिक पॉइंटर पहला है अभी शेयर्ड पॉइंटर और वीक पॉइंटर बाकी है जो कि मैं आगे की वीडियोस में आपको बताऊंगा लेकिन उसके पहले मैं चाहता हूं कि आप इस वीडियो पर कमेंट करके बताइए कि यह जो कांसेप्ट है यह आपको पहले से पता था क्या और अगर नहीं पता था लेकिन आपने इसके बारे में सुन रखा था और यह बड़ा कॉम्प्लिकेटेड सा लगता था तो क्या आज आपको यह क्लियर हो गया है जरा कमेंट देकर मुझे बताइए इससे मेरा भी हौसला आप बढ़ा सकोगे कि इस तरह के और वीडियोस आपके लिए लेकर आऊं जिसमें जो टिपिकल कांसेप्ट है उनको मैं एक्सप्लेन कर सकूं और यह कांसेप्ट आपको इस तरीके से और कहीं ना मिले ऐसे मैं आपको बताना चाहता हूं और भी अगर आपको लगता है कुछ ऐसे टिपिकल कांसेप्ट हैं जिनके बारे में आप जानना चाहते हो वो भी आप कमेंट में मुझे सजेस्ट कर सकते हो और वीडियोस अगर पसंद आ रहे हैं तो प्लीज लाइक भी करिए शेयर भी करिए और इस चैनल को सब्सक्राइब कर लीजिए ताकि इस तरह के कोई भी वीडियोस आपसे मिस ना हो आज के लिए इतना ही थैंक यू गुड [संगीत] [प्रशंसा] बाय

Need a transcript for another video?

Get free YouTube transcripts with timestamps, translation, and download options.

Transcript content is sourced from YouTube's auto-generated captions or AI transcription. All video content belongs to the original creators. Terms of Service · DMCA Contact

Smart Pointers in C++ Explained in Hindi | Coding Example...