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 का डिस्ट्रक्टर नहीं चलेगा