If I have the below two classes:
#include <cstdlib>
class Parent
{
protected:
int* mem = (int*) std::malloc(5); // pointer to dynamically-stored object
public:
Parent() {};
virtual ~Parent()
{
delete(mem);
}
};
class Child: public Parent
{
public:
Child() {};
~Child()
{
delete(mem);
}
};
int main(void)
{
Child* c = new Child();
delete(c);
}
Shouldn't calling delete
on an instance of the Child
class cause a segmentation fault, since the parent's destructor is also automatically called after the child destructor? And if so, would the solution be for the Child
class to only deal with freeing dynamically-allocated memory "owned" by Child
class (i.e. not delete mem
in Child
's destructor and leave it to Parent
to deal with it) ?
I ran my main function and expected a segmentation fault to occur since mem
was being freed twice - once in Child
's destructor and again in the Parent
destructor. No error occurred, which I found surprising. Can anyone please explain why?