class base
{
public:
virtual ~base() = 0;
};
base::~base()
{
cout <<"Destructing base"<<endl;
}
class derived : public base
{
~derived()
{
cout <<"Destructing derived"<<endl;
}
};
int main()
{
base* b = new derived();
delete b;
b = 0;
}
Here - I have declared the derived destructor as private and allocated memory on heap. But when I run this, I do see the derived destructor also getting called. Instead if I run this in the main function as below by allocating memory on the code segment as below -
int main()
{
derived d;
}
This throws an error saying the destructor is private.
I am confused - Doesn't delete internally also call the destructor before calling free()?