If tutorials available on this website are helpful for you, please whitelist this website in your ad blocker😭 or Donate to help us ❤️ pay for the web hosting to keep the website running.
C++ में Virtual Functions की तरह ही आप virtual destructor भी define कर सकते हैं। इसके लिए virtual keyword के साथ destructor को define किया जाता है।
C++ में, Virtual destructor का मैं purpose derived / child class object के द्वारा allocate किये हुए memory space को free करना है। इसमें base / parent class के pointer का use करके derived / child class के objects को destroy किया जाता है।
जब भी किसी parent object में child class object को typecast किया जाता है। तो object destroy होने पर child class के destructor को भी memory से delete होने के लिए , base class destructor virtual होना चाहिए।
फिलहाल हम एक ऐसा example देखेंगे जिसमे virtual destructor का use नहीं करेंगे।
#include <iostream>
using namespace std;
// define base class.
class Base
{
public:
// define destructor.
~Base()
{
cout << "Base Class Destructor.\n";
}
};
// Defin derived class and inherit Base class.
class Derived:public Base
{
public:
~Derived()
{
cout<< "Derived Class Destructor\n";
}
};
int main()
{
Base* b = new Derived; // Upcasting
delete b;
return 0;
}
Base Class Destructor.
ऊपर दिए गए example में delete b सिर्फ Base class के destructor को call करेगा , हो कि सही नहीं क्योंकि इससे Derived class undestructed रह जाती है क्योंकि इसका destructor call नहीं हुआ है। जो कि memory leak का कारण है।
अब same example को virtual destructor का use करके देखते हैं।
#include <iostream>
using namespace std;
// define base class.
class Base
{
public:
// define virtual destructor.
virtual ~Base()
{
cout << "Base Class Destructor.\n";
}
};
// Defin derived class and inherit Base class.
class Derived:public Base
{
public:
~Derived()
{
cout<< "Derived Class Destructor\n";
}
};
int main()
{
Base* b = new Derived; // Upcasting
delete b;
return 0;
}
Derived Class Destructor Base Class Destructor.
जब भी Base class में Virtual destructor define किया जाता है तो सबसे पहले Derived class का destrctor call होता है फिर base class का। जैसा कि example में आप देख भी सकते हैं।
ध्यान रहे सिर्फ destructors को ही virtual define किया जा सकता है , constructor को Virtual define नहीं किया जा सकता है।
Pure Virtual Functions की तरह ही pure virtual destructor भी C++ में define कर सकते हैं। अगर किसी class में pure virtual destructor defined है , तो उस class को pure virtual destructor के लिए function body (definition) जरूर provide करनी चाहिए। अगर हम इसके लिए function body provide नहीं करते है तो हमारे program में error आयेगी।
वह class जो pure virtual destructor को contain किये रहती है वह abstract class बन जाती है। और इसलिए हम इस class के object को create नहीं कर सकते।
Pure virtual destructor में base class में defined function के लिए definition नहीं provide की जाती है , simply 0 assign कर दिया जाता है। उसकी definition को class के बाहर provide किया जाता है।
#include <iostream>
using namespace std;
class Base
{
public:
// define pure virtual distructor.
virtual ~Base() = 0;
};
// Provide definition of Pure Virtual Destructor
Base::~Base()
{
cout << "Base Class Destructor.";
}
// Inherit Base class.
class Derived:public Base
{
public:
~Derived()
{
cout<< "Derived Class Destructor.\n";
}
};
int main() {
Base *b = new Derived;
delete b;
return 0;
}
Derived Class Destructor. Base Class Destructor.
I Hope, आपको C++ में pure virtual destructor के बारे में अच्छे से समझ आया होगा। :)