C++ Virtual Destructor In Hindi

📔 : C++ 🔗

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 होना चाहिए।

C++ Upcasting without Virtual Destructor

फिलहाल हम एक ऐसा example देखेंगे जिसमे virtual destructor का use नहीं करेंगे।

CopyFullscreenClose FullscreenRun
#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;
}
Output
Base Class Destructor.

ऊपर दिए गए example में delete b सिर्फ Base class के destructor को call करेगा , हो कि सही नहीं क्योंकि इससे Derived class undestructed रह जाती है क्योंकि इसका destructor call नहीं हुआ है। जो कि memory leak का कारण है।

C++ Virtual Destructor Example

अब same example को virtual destructor का use करके देखते हैं।

CopyFullscreenClose FullscreenRun
#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;
}
Output
Derived Class Destructor
Base Class Destructor.

जब भी Base class में Virtual destructor define किया जाता है तो सबसे पहले Derived class का destrctor call होता है फिर base class का। जैसा कि example में आप देख भी सकते हैं।

ध्यान रहे सिर्फ destructors को ही virtual define किया जा सकता है , constructor को Virtual define नहीं किया जा सकता है।

C++ Pure Virtual Destructor

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 किया जाता है।

C++ Pure Virtual Destructor Example
CopyFullscreenClose FullscreenRun
#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;
}
Output
Derived Class Destructor.
Base Class Destructor.

I Hope, आपको C++ में pure virtual destructor के बारे में अच्छे से समझ आया होगा। :)

Related Topics :

Rahul Kumar

Rahul Kumar

Hi ! I'm Rahul Kumar Rajput founder of learnhindituts.com. I'm a software developer having more than 4 years of experience. I love to talk about programming as well as writing technical tutorials and blogs that can help to others. I'm here to help you navigate the coding cosmos and turn your ideas into reality, keep coding, keep learning :)

Get connected with me. :) LinkedIn Twitter Instagram Facebook

b2eprogrammers