Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में new और delete ऑपरेटर्स


new ऑपरेटर

हीप में मेमोरी आवंटन का अनुरोध करता है। यदि पर्याप्त मेमोरी उपलब्ध है, तो पॉइंटर वेरिएबल को आरंभ करके उसका पता लौटाता है।

सिंटैक्स

pointer_variable = new datatype;

आरंभीकरण के साथ

pointer_variable = new datatype(value);

ब्लॉक आवंटन (ऐरे)

pointer_variable = new datatype[size];

उदाहरण

#include <iostream>
using namespace std;

int main() {
    int* ptr1 = NULL;
    ptr1 = new int;                    // सिंगल int
    float* ptr2 = new float(223.324);  // आरंभीकरण के साथ
    int* ptr3 = new int[28];           // ऐरे ब्लॉक
    
    *ptr1 = 28;
    cout << "Value of ptr1: " << *ptr1 << endl;
    cout << "Value of ptr2: " << *ptr2 << endl;
    
    if (!ptr3)
        cout << "Allocation failed\n";
    else {
        for (int i = 10; i < 15; i++)
            ptr3[i] = i + 1;
        cout << "Block values: ";
        for (int i = 10; i < 15; i++)
            cout << ptr3[i] << " ";
    }
    return 0;
}

आउटपुट

Value of ptr1: 28
Value of ptr2: 223.324
Block values: 11 12 13 14 15

delete ऑपरेटर

आवंटित मेमोरी को डीएलोकेट (मुक्त) करता है। प्रोग्रामर का विशेषाधिकार है कि बनाए गए पॉइंटर को delete से मुक्त करे।

सिंटैक्स

delete pointer_variable;

ऐरे ब्लॉक हटाने के लिए

delete[] pointer_variable;

उदाहरण (new और delete साथ में)

#include <iostream>
using namespace std;

int main() {
    int* ptr1 = new int;
    float* ptr2 = new float(299.121);
    int* ptr3 = new int[28];
    
    *ptr1 = 28;
    cout << "ptr1: " << *ptr1 << endl;
    cout << "ptr2: " << *ptr2 << endl;
    
    for (int i = 10; i < 15; i++)
        ptr3[i] = i + 1;
    cout << "Block: ";
    for (int i = 10; i < 15; i++)
        cout << ptr3[i] << " ";
    
    delete ptr1;      // सिंगल ऑब्जेक्ट
    delete ptr2;      // सिंगल ऑब्जेक्ट
    delete[] ptr3;    // ऐरे ब्लॉक
    
    return 0;
}

आउटपुट

ptr1: 28
ptr2: 299.121
Block: 11 12 13 14 15

महत्वपूर्ण नियम

  • हर new का मिलान delete से होना चाहिए
  • हर new[] का मिलान delete[] से होना चाहिए
  • गलत मिलान अपरिभाषित व्यवहार का कारण बनता है
  • NULL पॉइंटर पर delete सुरक्षित है (कुछ नहीं करता)
  • आधुनिक C++ में स्मार्ट पॉइंटर्स (unique_ptr, shared_ptr) पसंद किए जाते हैं

स्मार्ट पॉइंटर उदाहरण (C++11)

#include <memory>
#include <iostream>

int main() {
    auto ptr1 = std::make_unique<int>(28);
    auto ptr2 = std::make_unique<float>(223.324f);
    auto arr = std::make_unique<int[]>(28);
    // स्वचालित डीएलोकेशन, कोई delete आवश्यक नहीं
    return 0;
}
  1. - C++ में Lvalues और Rvalues क्या हैं?

    एक lvalue (लोकेटर वैल्यू) एक ऑब्जेक्ट को दर्शाता है जो मेमोरी में कुछ पहचान योग्य स्थान घेरता है (यानी उसका एक एड्रेस होता है)। rvalues को अपवर्जन द्वारा परिभाषित किया जाता है। प्रत्येक एक्सप्रेशन या तो lvalue होता है या rvalue, इसलिए, एक rvalue एक ऐसा एक्सप्रेशन है जो मेमोरी में कुछ पहचान योग्य स्

  1. - C++ में इन्क्रीमेंट ++ और डिक्रीमेंट -- ऑपरेटर ओवरलोडिंग

    इन्क्रीमेंट (++) और डिक्रीमेंट (--) ऑपरेटर C++ में दो महत्वपूर्ण यूनरी ऑपरेटर हैं। निम्नलिखित उदाहरण दर्शाता है कि इन्क्रीमेंट (++) ऑपरेटर को प्रीफिक्स और पोस्टफिक्स दोनों उपयोग के लिए कैसे ओवरलोड किया जा सकता है। इसी तरह, आप ऑपरेटर (--) को भी ओवरलोड कर सकते हैं। उदाहरण = 60) { ++hours;

  1. - C++ में new ऑपरेटर से मेमोरी कैसे इनिशियलाइज़ करें?

    C++ में new ऑपरेटर मेमोरी आवंटित करने के लिए परिभाषित है, इनिशियलाइज़ करने के लिए नहीं। यदि आप int प्रकार का एक ऐरे new ऑपरेटर से आवंटित करना चाहते हैं, और आप उन सभी को डिफ़ॉल्ट मान (यानी int के मामले में 0) से इनिशियलाइज़ करना चाहते हैं, तो आप निम्न सिंटैक्स का उपयोग कर सकते हैं: सिंटैक्स new int[