C++ Academy · पाठ

Smart pointers कच्चे new और delete का स्थान क्यों लेते हैं

RAII समझें और जानें कि आधुनिक C++ में owning raw pointers का उपयोग बहुत कम ही सही होता है।

पाठ 1, कुल 4 में से13 चरण

Smart pointers कच्चे new और delete का स्थान क्यों लेते हैं, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

कच्चा new और delete

C से मिली विरासत: new T हीप पर एक T आवंटित करता है; delete उसे मुक्त करता है। आपको प्रत्येक new का ठीक एक delete से मिलान करना होगा — वरना स्मृति रिसाव होगा (या प्रोग्राम क्रैश होगा)।

Widget* w = new Widget();
// ... use w ...
delete w;        // forget this and you leak

क्या गलत होता है

सामान्य विफलताएँ:

  • भूला हुआ delete — स्मृति रिसाव
  • दो बार delete — अपरिभाषित व्यवहार
  • new और delete के बीच अपवाद उत्पन्न होना — रिसाव
  • अस्पष्ट स्वामित्व वाला कच्चा पॉइंटर लौटाना

RAII बचाव के लिए

संसाधन अधिग्रहण ही आरंभीकरण है: किसी संसाधन का जीवनकाल स्टैक ऑब्जेक्ट के जीवनकाल से जोड़ें। अपवाद उत्पन्न होने पर भी डिस्ट्रक्टर संसाधन को मुक्त करता है।

स्मार्ट पॉइंटर का विचार

स्मार्ट पॉइंटर कच्चे पॉइंटर के चारों ओर एक छोटा RAII आवरण है। इसका डिस्ट्रक्टर delete को बुलाता है। आप संसाधन मुक्त करना कभी नहीं भूलते।

तीन स्मार्ट पॉइंटर

<memory> में मानक लाइब्रेरी के स्मार्ट पॉइंटर:

  • std::unique_ptr<T> — विशिष्ट स्वामित्व
  • std::shared_ptr<T> — संदर्भ-गणना के साथ साझा स्वामित्व
  • std::weak_ptr<T> — shared_ptr का गैर-स्वामित्व वाला पर्यवेक्षक

स्मार्ट पॉइंटर कम लागत वाले हैं

unique_ptr में कोई अतिरिक्त लागत नहीं होती (आकार और गति कच्चे पॉइंटर जैसी ही होती है)। shared_ptr में परमाणु संदर्भ-गणना की थोड़ी लागत होती है।

मैन्युअल delete अब नहीं

स्मार्ट पॉइंटर के साथ आप लगभग कभी delete नहीं लिखते। डिस्ट्रक्टर इसका ध्यान रखता है।

#include <memory>
std::unique_ptr<Widget> w = std::make_unique<Widget>();
// no delete needed — when w goes out of scope, Widget is destroyed

स्मार्ट पॉइंटर और अपवाद

यदि फ़ंक्शन के बीच में कोई अपवाद उत्पन्न हो, तो स्थानीय चर उलटे क्रम में नष्ट होते हैं। स्मार्ट पॉइंटर अपने संसाधन स्वतः मुक्त करते हैं — कच्चे पॉइंटर रिसाव पैदा करते हैं।

प्रकार में स्वामित्व

अब स्मार्ट पॉइंटर का प्रकार स्वामित्व को व्यक्त करता है। फ़ंक्शन हस्ताक्षर पढ़कर पता चल जाता है कि वस्तु का स्वामी कौन है।

// I take ownership
void consume(std::unique_ptr<Widget> w);

// I look but do not own
void inspect(const Widget& w);

कच्चे पॉइंटर अब भी मौजूद हैं

गैर-स्वामित्व वाले अभिगम के लिए कच्चे पॉइंटर (या संदर्भ) का उपयोग करें। वे बताते हैं, "मैं उधार ले रहा हूँ, स्वामी नहीं हूँ।"

new को make फ़ंक्शन से बदलना

std::make_unique (C++14) और std::make_shared (C++11) को प्राथमिकता दें। ये अपवाद-सुरक्षित हैं और सीधे new बुलाने की तुलना में थोड़े अधिक कुशल हैं।

auto w = std::make_unique<Widget>(42);
auto s = std::make_shared<Resource>("file.txt");

त्वरित जाँच

कच्चे new/delete युग्म के बजाय std::unique_ptr का उपयोग करने का मुख्य कारण क्या है?

पुनरावलोकन

कच्चा new/delete त्रुटि-प्रवण है। स्मार्ट पॉइंटर हीप पर आवंटित वस्तुओं को RAII हैंडल में लपेटते हैं, जो स्वतः संसाधन मुक्त करते हैं। सुरक्षा और प्रदर्शन के लिए std::make_unique और std::make_shared को प्राथमिकता दें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “Smart pointers कच्चे new और delete का स्थान क्यों लेते हैं” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Smart pointers कच्चे new और delete का स्थान क्यों लेते हैं” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Smart pointers कच्चे new और delete का स्थान क्यों लेते हैं” में मैं क्या सीखूँगा?

RAII समझें और जानें कि आधुनिक C++ में owning raw pointers का उपयोग बहुत कम ही सही होता है। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“Smart pointers कच्चे new और delete का स्थान क्यों लेते हैं” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Smart pointers कच्चे new और delete का स्थान क्यों लेते हैं
  2. unique_ptr: विशिष्ट स्वामित्व
  3. shared_ptr और weak_ptr: साझा स्वामित्व
  4. Custom deleters और make functions
← C++ Academy पर वापस जाएँ