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

C++ में एक्सेप्शन हैंडलिंग और ऑब्जेक्ट डिस्ट्रक्शन

C++ में डिस्ट्रक्टर्स तब कॉल होते हैं जब ऑब्जेक्ट्स नष्ट होते हैं और सिस्टम से मेमोरी रिलीज करते हैं। जब क्लास में एक एक्सेप्शन थ्रो होता है, तो डिस्ट्रक्टर कैच ब्लॉक के निष्पादित होने से पहले ऑटोमैटिकली कॉल हो जाता है।

एल्गोरिदम

शुरुआत
    sample1 क्लास घोषित करें
        sample1 का कंस्ट्रक्टर घोषित करें
            "sample1 का ऑब्जेक्ट बना" प्रिंट करें
        sample1 का डिस्ट्रक्टर घोषित करें
            "sample1 का ऑब्जेक्ट नष्ट हुआ" प्रिंट करें
    sample2 क्लास घोषित करें
        sample2 का कंस्ट्रक्टर घोषित करें
            integer डेटाटाइप का वेरिएबल i घोषित करें
            i = 7 इनिशियलाइज़ करें
            "sample2 का ऑब्जेक्ट बना" प्रिंट करें
            i थ्रो करें
        sample2 का डिस्ट्रक्टर घोषित करें
            "sample2 का ऑब्जेक्ट नष्ट हुआ" प्रिंट करें
    Try:
        sample1 क्लास का ऑब्जेक्ट s1 घोषित करें
        sample2 क्लास का ऑब्जेक्ट s2 घोषित करें
    Catch(int i)
        "पकड़ा गया" प्रिंट करें
        वेरिएबल i का मान प्रिंट करें
समाप्ति

उदाहरण कोड

#include <iostream>
using namespace std;

class Sample1 {
public:
    Sample1() {
        cout << "sample1 का ऑब्जेक्ट बना" << endl;
    }
    ~Sample1() {
        cout << "sample1 का ऑब्जेक्ट नष्ट हुआ" << endl;
    }
};

class Sample2 {
public:
    Sample2() {
        int i = 7;
        cout << "sample2 का ऑब्जेक्ट बना" << endl;
        throw i;
    }
    ~Sample2() {
        cout << "sample2 का ऑब्जेक्ट नष्ट हुआ" << endl;
    }
};

int main() {
    try {
        Sample1 s1;
        Sample2 s2;
    } catch(int i) {
        cout << "पकड़ा गया " << i << endl;
    }
}

आउटपुट

sample1 का ऑब्जेक्ट बना
sample2 का ऑब्जेक्ट बना
sample1 का ऑब्जेक्ट नष्ट हुआ
पकड़ा गया 7

महत्वपूर्ण बिंदु

  • s1 का डिस्ट्रक्टर कॉल हुआ क्योंकि s1 सफलतापूर्वक बना था
  • s2 का डिस्ट्रक्टर कॉल नहीं हुआ क्योंकि s2 का कंस्ट्रक्टर पूरा होने से पहले ही एक्सेप्शन थ्रो हो गया
  • यह स्टैक अनवाइंडिंग का उदाहरण है - एक्सेप्शन थ्रो होने पर पूरी तरह से बने ऑब्जेक्ट्स के डिस्ट्रक्टर्स कॉल होते हैं
  • यदि s2 का कंस्ट्रक्टर एक्सेप्शन थ्रो करता है, तो s2 का डिस्ट्रक्टर नहीं चलेगा
  1. C++ में एक्सेप्शन हैंडलिंग की मूल बातें C++ में एक्सेप्शन हैंडलिंग की मूल बातें

    C++ में, एक्सेप्शन हैंडलिंग रनटाइम त्रुटियों को संभालने की एक प्रक्रिया है। एक्सेप्शन C++ में रनटाइम पर फेंका गया एक इवेंट है। सभी एक्सेप्शन std::exception क्लास से प्राप्त होते हैं। यह एक रनटाइम त्रुटि है जिसे संभाला जा सकता है। यदि हम एक्सेप्शन को नहीं संभालते हैं, तो यह एक्सेप्शन संदेश प्रिंट कर

  1. - C++ में delete() और free()

    delete()delete ऑपरेटर का उपयोग मेमोरी को डीएलोकेट करने के लिए किया जाता है। उपयोगकर्ता के पास इस delete ऑपरेटर द्वारा बनाए गए पॉइंटर वेरिएबल को डीएलोकेट करने का विशेषाधिकार होता है। C++ भाषा में delete ऑपरेटर का सिंटैक्स यहां दिया गया है, delete pointer_variable; आवंटित मेमोरी के ब्लॉक को हटाने का स

  1. - C# में एक्सेप्शन हैंडलिंग क्या है

    एक्सेप्शन्स वे समस्याएं हैं जो प्रोग्राम एक्जीक्यूट होने पर उत्पन्न होती हैं। C# में एक्सेप्शन्स को हैंडल करने के लिए निम्नलिखित कीवर्ड्स हैं। try try ब्लॉक कोड के उस ब्लॉक की पहचान करता है जिसके लिए विशेष एक्सेप्शन एक्टिवेट होता है। Catch catch कीवर्ड एक्सेप्शन को पकड़ने का संकेत देता है। finally द