डिस्ट्रक्टर C++ में एक क्लास का फ़ंक्शन है जो क्लास के ऑब्जेक्ट को हटाने का काम करता है।
डिस्ट्रक्टर को कॉल करना
डिस्ट्रक्टर तब कॉल होता है जब प्रोग्राम में क्लास का ऑब्जेक्ट स्कोप से बाहर चला जाता है। वे मामले जब ऑब्जेक्ट स्कोप से बाहर जाता है,
प्रोग्राम किसी फ़ंक्शन के स्कोप से बाहर जाता है।
प्रोग्राम समाप्त होता है।
ऑब्जेक्ट के लोकल वेरिएबल्स को आरंभ करने वाला ब्लॉक स्कोप से बाहर जाता है।
जब ऑब्जेक्ट का ऑपरेटर डिलीट होता है।
उदाहरण
आइए एक कोड देखें और प्रोग्राम के आउटपुट का अनुमान लगाएं,
#include <iostream>
using namespace std;
int i;
class destructor {
public:
~destructor() {
i = 10;
}
};
int valueInitializer() {
i = 3;
destructor d1;
return i;
}
int main() {
cout << "i = " << valueInitializer() << endl;
return 0;
}
आउटपुट
i = 3
आइए पहले कोड को समझते हैं, यहां हमने एक ग्लोबल वेरिएबल i बनाया है और फिर वैल्यू इनिशियलाइज़र फ़ंक्शन में इसका मान बदल दिया है। यहां, हमने इसे मान 3 से आरंभ किया फिर ऑब्जेक्ट d1 बनाया और फिर मान वापस कर दिया।
आउटपुट का अनुमान लगाएं?
यह 3 है, अगर आपने सही अनुमान लगाया तो ताली बजाएं और कोई चिंता नहीं अगर आपने सोचा कि यह 10 है। अब देखते हैं कि यहां क्या हुआ,
जैसा कि ऊपर चर्चा की गई है, डिस्ट्रक्टर तब कॉल होता है जब कॉलिंग फ़ंक्शन स्कोप से बाहर जाता है। और स्कोप से बाहर जाने से पहले फ़ंक्शन ने मान 3 वापस कर दिया है।
उदाहरण
एक और कोशिश करें, अब इस ब्लॉक का आउटपुट अनुमान लगाएं,
#include <iostream>
using namespace std;
int i;
class destructor {
public:
~destructor() {
i = 10;
}
};
int& valueInitializer() {
i = 3;
destructor d1;
return i;
}
int main() {
cout << "i = " << valueInitializer() << endl;
return 0;
}
आउटपुट
यह एक समान दिखने वाला कोड है लेकिन यह वाला
प्रिंट करता है: i = 10 बजाय।
क्यों?
यहां, हमने मान के बजाय वेरिएबल का रेफरेंस वापस किया है। इसलिए, जब डिस्ट्रक्टर कॉल होता है तो यह मान को 10 में बदल देता है और चूंकि रेफरेंस पास किया गया है, 10 प्रिंट होता है।