C++ Academy · पाठ

new/delete से हीप आवंटन

गतिशील मेमोरी प्रबंधित करें

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

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

new के साथ गतिशील मेमोरी

new ऑपरेटर हीप (मुक्त स्टोर) पर एक ऑब्जेक्ट आवंटित करता है और उसका पॉइंटर लौटाता है। हीप ऑब्जेक्ट्स तब तक रहते हैं जब तक आप उन्हें स्पष्ट रूप से मुक्त न कर दें।

#include <iostream>

int main() {
    int* p = new int(42);   // heap allocation
    std::cout << *p << "\n";
    delete p;               // release it
}

डिलीट द्वारा मुक्त करना

हर new का ठीक एक delete से मिलान होना चाहिए। इसे भूलने पर मेमोरी लीक होती है; दो बार करने पर हीप दूषित हो जाता है।

#include <iostream>

int main() {
    double* d = new double(3.5);
    std::cout << *d << "\n";
    delete d;     // exactly once
}

ऐरे: new[] और delete[]

ऐरे के लिए new[] और उससे मेल खाने वाला delete[] इस्तेमाल करें। new[] को साधारण delete के साथ मिलाना अपरिभाषित व्यवहार है।

#include <iostream>

int main() {
    int* arr = new int[3]{1, 2, 3};
    for (int i = 0; i < 3; ++i) std::cout << arr[i] << "\n";
    delete[] arr;   // note the [ ]
}

हीप का उपयोग क्यों करें

हीप का उपयोग तब करें जब किसी ऑब्जेक्ट को बनाने वाले फ़ंक्शन से अधिक समय तक जीवित रहना हो, या जब उसका आकार केवल रनटाइम पर ज्ञात हो। अन्यथा स्टैक को प्राथमिकता दें।

हीप का जीवनकाल मैन्युअल होता है

स्टैक के विपरीत, हीप ऑब्जेक्ट्स को स्वचालित रूप से मुक्त नहीं करता। मेमोरी कब मुक्त होगी, यह आप ठीक-ठीक नियंत्रित करते हैं — और इसकी ज़िम्मेदारी भी आपकी है।

#include <iostream>

int* makeCounter() {
    return new int(0);   // survives the function
}

int main() {
    int* c = makeCounter();
    std::cout << *c << "\n";
    delete c;
}

डिलीट के बाद पॉइंटर्स को nullptr पर सेट करें

डिलीट करने के बाद पॉइंटर को nullptr पर सेट करें, ताकि गलती से उसका दोबारा उपयोग होने पर मुक्त की गई मेमोरी को छूने के बजाय तुरंत स्पष्ट त्रुटि मिले।

#include <iostream>

int main() {
    int* p = new int(9);
    delete p;
    p = nullptr;     // now p is safe to check
    if (!p) std::cout << "freed\n";
}

आवंटन विफल हो सकता है

यदि सिस्टम में मेमोरी समाप्त हो जाए, तो new std::bad_alloc उत्पन्न करता है। बहुत बड़े आवंटन के लिए यह वास्तविक संभावना है।

रनटाइम आकार वाले बफ़र

हीप ऐरे ऐसे आकार का उपयोग कर सकते हैं जिसकी गणना रनटाइम पर की गई हो — यह ऐसी सुविधा है जो स्टैक ऐरे पोर्टेबल तरीके से नहीं दे सकते।

#include <iostream>

int main() {
    int n = 5;
    int* buf = new int[n];
    for (int i = 0; i < n; ++i) buf[i] = i * i;
    std::cout << buf[4] << "\n";
    delete[] buf;
}

स्मार्ट पॉइंटर्स को प्राथमिकता दें

आधुनिक C++ कच्चे new/delete से बचता है। std::unique_ptr और std::make_unique पॉइंटर का दायरा समाप्त होने पर मेमोरी को स्वचालित रूप से मुक्त कर देते हैं।

#include <iostream>
#include <memory>

int main() {
    auto p = std::make_unique<int>(42);
    std::cout << *p << "\n";
}   // freed automatically

हीप की लागत

हीप आवंटन स्टैक से धीमा होता है: यह एक मुक्त ब्लॉक खोजता है और लेखा-जोखा अपडेट करता है। बार-बार किए गए छोटे आवंटन प्रदर्शन को प्रभावित कर सकते हैं।

हर new का मिलान करें

सुनहरा नियम: हर new के लिए एक delete और हर new[] के लिए एक delete[] आवश्यक है। इससे भी बेहतर है कि स्मार्ट पॉइंटर्स को यह काम करने दें।

त्वरित जाँच

हीप आवंटन की अपनी समझ का परीक्षण करें।

पुनरावलोकन

आपने new/new[] के साथ हीप पर आवंटन करना और delete/delete[] के साथ मुक्त करना सीखा। हीप ऑब्जेक्ट्स अपने दायरे से अधिक समय तक जीवित रहते हैं, लेकिन उन्हें मैन्युअल सफ़ाई की आवश्यकता होती है। हर आवंटन का मिलान करें, मुक्त किए गए पॉइंटर्स को शून्य करें और आधुनिक कोड में std::unique_ptr को प्राथमिकता दें।

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

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

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

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

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

क्या “new/delete से हीप आवंटन” पाठ निःशुल्क है?

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

“new/delete से हीप आवंटन” में मैं क्या सीखूँगा?

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

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

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

“new/delete से हीप आवंटन” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. स्टैक आवंटन
  2. new/delete से हीप आवंटन
  3. ऑब्जेक्ट का जीवनकाल
  4. सामान्य मेमोरी बग
← C++ Academy पर वापस जाएँ