सभी विनाशक, ~D()
, ~C()
, ~B()
, ~A()
नीचे दिए गए उदाहरण में क्यों बुलाए जा रहे हैं?व्युत्पन्न वर्ग के विनाशक गैर-आभासी होने पर बेस-क्लास विनाशक को व्युत्पन्न वस्तु पर क्यों बुलाया जाता है?
केवल एक आभासी विनाशक है: A
का।
#include<iostream>
using namespace std;
class A
{
public:
virtual ~A()
{
cout<<"destruct A\n";
}
};
class B:public A
{
public:
~B()
{
cout<<"destruct B\n";
}
};
class C:public B
{
public:
~C()
{
cout<<"destruct C\n";
}
};
class D:public C
{
public:
~D()
{
cout<<"destruct D\n";
}
};
int main()
{
A* ptr = new D();
delete ptr;
return 0;
}
क्योंकि भाषा के नियमों का कहना है कि यही होना चाहिए। – juanchopanza