Destructor concepts c++ In Hindi
C++ प्रोग्रामिंग लैंग्वेज में डिस्ट्रक्टर क्लास डाटा किसी क्लास के एक स्पेशल पैरामीटर मेंबर फ़ंक्शन होते है, जिसे किसी यूजर डिफाइन क्लास प्रोग्राम में तब इनवोक किया जाता है. जब मौजूदा क्लास में किसी क्लास के ऑब्जेक्ट को डिस्ट्रॉय करना होता है। C++ प्रोग्राम में डिस्ट्रक्टर मेथड का स्पेशल यूज़ केस सिर्फ उन क्लास रिसोर्स को रिलीज़ या फ्री करना होता है. जो किसी क्लास में ऑब्जेक्ट के लाइफटाइम के दौरान अचीव किए गए थे. जैसे, मौजूदा क्लास में डिस्ट्रक्टर मेथड में डायनामिकली आर्डर में एलोकेट की गई प्रोग्राम वेरिएबल की मेमोरी या अन्य प्रोग्राम रिसोर्स मैनेजमेंट में जैसे फ़ाइल हैंडलिंग, नेटवर्क कनेक्शन इस्टैब्लिशमेंट, आदि टास्क को मैनेज करने में होता है। ज्यादातर C++ प्रोग्राम में डिस्ट्रक्टर मेथड को मौजूदा सिस्टम रिसोर्स को क्लीनअप फ्री या डीलोकेशन करने में किया जाता है।

Special Features of the Destructor Method in C++ Programming
Automatic Destructor Invocation.
जब किसी यूजर डिफाइन क्लास में कोई ऑब्जेक्ट उसके स्कोप से बाहर हो जाता है. (क्लास में डिक्लेअर लोकल पैरामीटर ऑब्जेक्ट के लिए) या जब उसे क्लियर आर्डर में डिलीट किया जाता है. जैसे (मौजूदा क्लास में डायनामिकली आर्डर में एलोकेट किए गए क्लास ऑब्जेक्ट के लिए) तो इस प्रोसेस में डिस्ट्रक्टर मेथड आटोमेटिक कॉल हो जाता है।
क्लास में डिफाइन डिस्ट्रक्शन मेथड पैरामीटर ऑब्जेक्ट के स्कोप के आखिरी स्टेटमेंट के एग्जीक्यूट होने के बाद होता है।
No arguments.
किसी यूजर डिफाइन क्लास में डिस्ट्रक्टर में कोई पैरामीटर वेरिएबल नहीं होते हैं, और इसे कभी ओवरलोड नहीं किया जा सकता है। C++ यूजर के पास प्रत्येक क्लास में सिर्फ़ एक डिस्ट्रक्टर मेथड डिफाइन हो सकता है।
No return value.
किसी यूजर डिफाइन क्लास में डिस्ट्रक्टर कुछ भी ऑब्जेक्ट वैल्यू को रिटर्न नहीं करता है, इसका मतलब की इसका (कोई रिटर्न डाटा टाइप नहीं) वैल्यू नहीं होता है।
Cannot be called explicitly.
किसी यूजर डिफाइन क्लास में डिस्ट्रक्टर मेथड को एक रेगुलर फ़ंक्शन की तरह क्लियर आर्डर में कॉल नहीं किया जा सकता है। जब मौजूदा क्लास में डिक्लेअर ऑब्जेक्ट अपने आप डिस्टोर्य हो जाता है, तो यह अपने आप स्टार्ट हो जाता है।
Invoked in reverse order of construction.
किसी यूजर डिफाइन क्लास में डिस्ट्रक्टर मेथड को कंस्ट्रक्टर मेथड के अपोजिट आर्डर में कॉल किया जाता है। जैसे, यदि किसी क्लास फ़ंक्शन में कोई नया ऑब्जेक्ट क्रिएट किया जाता है. तो मौजूदा प्रोग्राम फ़ंक्शन के रिटर्न होने और ऑब्जेक्ट के स्कोप से बाहर हो जाने पर डिस्ट्रक्टर मेथड को कॉल किया जाएगा।
Cannot be inherited or overloaded.
जैसाकि डिस्ट्रक्टर मेथड ऑब्जेक्ट डिराइव्ड क्लास प्रॉपर्टीज में आटोमेटिक इनहेरिट होते हैं, लेकिन उन्हें मौजूदा क्लास में कंस्ट्रक्टर मेथड की तरह ओवरलोड नहीं किया जा सकता है।
Basic C++ program destructor method syntax.
यहाँ आप अपने डिजायर क्लास में डिफाइन डिस्ट्रक्टर मेथड का नाम क्लास जैसा ही डिक्लेअर करना होता है. लेकिन आप इसे टिल्ड (~) सिंबल प्रीफ़िक्स के साथ डिफाइन कर सकते है।
~ClassName() {
// Cleanup code for the destructor method declared in the class
}
Example of a destructor in C++.
तो चलिए C++ प्रोग्रामिंग में एक एक्साम्प्ल से समझते हैं कि डिस्ट्रक्टर मेथड कैसे काम करते हैं।
Example of a destructor method for resource management cleanup.
#include <iostream>
#include <string>
class Course {
public:
std::string course_name;
int c_price;
// here we declare a Constructor method
Course(std::string cn, int cp) : course_name(cn), c_price(cp) {
std::cout << “Course class object created – ” << course_name << std::endl;
}
// here we declare a Destructor method with ~ prefix symbol
~Course() {
std::cout << “Course class object destroyed – ” << course_name << std::endl;
}
void preview() {
std::cout << “The Course Name – ” << course_name << “, The Course Price – ” << c_price << std::endl;
}
};
int main() {
{
// here we Creating an class object in a scope
Course course(“Java programming”, 3999);
course.preview(); // Result – The Course Name – Java programming, The Course Price – 3999
} // here course goes out of scope, and its destructor method is automatically called
return 0;
}
Explanation of a destructor method for resource management cleanup.
- यहाँ इस एक्साम्प्ल में Course क्लास नाम से एक कंस्ट्रक्टर मेथड डिफाइन किया गया है. जो कोर्स का नाम और कोर्स का प्राइस क्लास ऑब्जेक्ट को इनिशियलाइज़ करता है, और इसमे एक डिस्ट्रक्टर मेथड को डिफाइन किया गया होता है. जो मौजूदा क्लास में ऑब्जेक्ट के डिस्ट्रॉय होने पर एक मैसेज इनफार्मेशन को प्रिंट करता है।
- इसमें main फ़ंक्शन में, जब course ऑब्जेक्ट क्लास स्कोप से बाहर हो जाता है. जिसमे (इनर ब्लॉक के आखिर में), तो मौजूदा प्रोग्राम में उसका डिस्ट्रक्टर मेथड ऑटोमैटिकली कॉल हो जाता है, जिससे इन ऑब्जेक्ट से अटैच रिसोर्स अपने आप रिलीज़ हो जाते हैं।
Destructor Method in Inheritance.
C++ क्लास प्रोग्राम में डिक्लेअर डिस्ट्रक्टर मेथड सबक्लास से इनहेरिट होते हैं, लेकिन इस तरह के इनहेरिटेंस कांसेप्ट के अपने कुछ पर्टिकुलर रूल्स एंड रेगुलेशन होते हैं.
Base Class Destructor in C++.
यदि कोई यूजर डिफाइन क्लास किसी बेस क्लास से इनहेरिट की गई है, तो इस प्रोसेस में बेस क्लास का डिस्ट्रक्टर पहले कॉल किया जाएगा, उसके बाद डिराइव्ड क्लास का डिस्ट्रक्टर मेथड होता है।
Virtual Destructor in C++.
यदि C++ यूजर किसी बेस क्लास के पॉइंटर के माध्यम से किसी क्लास ऑब्जेक्ट पैरामीटर को डिलीट करना चाहते हैं. तो C++ यूजर को बेस क्लास के डिस्ट्रक्टर को वर्चुअल डिक्लेयर करना चाहिए। इससे यह फिक्स हो जाता है कि मौजूदा क्लास में डिफाइन डिराइव्ड क्लास का डिस्ट्रक्टर पहले कॉल किया जाए, उसके बाद बेस क्लास का डिस्ट्रक्टर मेथड, जिससे मौजूदा क्लास में रिसोर्स लीक प्रोसेस को स्टॉप किया जा सके।
Example of a destructor (virtual destructor) method in inheritance.
#include <iostream>
class BaseClass {
public:
// here we create a Constructor method
BaseClass() {
std::cout << “BaseClass class constructor method define \n”;
}
// here we create a Virtual destructor method
virtual ~BaseClass() {
std::cout << “BaseClass class destructor method define \n”;
}
};
class DerivedClass : public BaseClass {
public:
// here we ceate a Constructor class method
DerivedClass() {
std::cout << “DerivedClass class constructor method define \n”;
}
// here we create a Destructor class method
~DerivedClass() {
std::cout << “DerivedClass class destructor method define \n”;
}
};
int main() {
BaseClass* classobj = new DerivedClass(); // here we Creating a Derived class object but storing it in a BaseClass pointer
delete classobj; // here we Properly calls Derived destructor followed by BaseClass destructor
return 0;
}
Explanation of a destructor (virtual destructor) method in inheritance.
- यहाँ इस एक्साम्प्ल में BaseClass में एक यूजर डिफाइन वर्चुअल डिस्ट्रक्टर मेथड होता है, जो मोजूदा प्रोग्राम में यह फिक्स करता है कि जब मौजूदा क्लास में delete classobj को कॉल किया जाता है. (जिसमे classobj बेस क्लास का एक पॉइंटर डिफाइन है), तो DerivedClass क्लास का डिस्ट्रक्टर पहले कॉल किया जाता है. उसके बाद BaseClass क्लास का डिस्ट्रक्टर डिफाइन है। यह प्रोसेस BaseClass और DerivedClass दोनों क्लास में यूज़ रिसोर्स की ठीक से क्लियर या फिक्स करता है।
