I want to inherit from class A, but A's destructor is not virtual and I cannot modify A's definition. How to avoid the following case?
struct A
{
A()
: a(new char[8])
{}
~A()
{
delete[] a;
}
char* a;
}
struct B : A
{
B()
: A(), b(new char[8])
{}
~B()
{
delete[] b;
}
char* b;
};
int main()
{
A* p_a = new B;
delete p_a; // How to avoid such a dangerous deletion?
}
If the base class doesn't have a virtual destructor and you can't modify the class definition, you're pretty much out of luck. As a general rule of thumb, you probably shouldn't use public inheritance with a base class that doesn't have a virtual destructor.
Maybe you can try using composition instead of inheritance? Place an instance of A
in B
, and provide public member functions that wrap calls to member functions of A
.