capypad
0 day streak
cpp / intermediate
Snippet

Virtual Destructors in Inheritance

In C++, if you delete a derived class object through a base class pointer, the behavior is undefined unless the base class has a virtual destructor. Marking it virtual ensures the entire object hierarchy is cleaned up correctly.

snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Base {
public:
virtual ~Base() { /* Cleanup base */ }
};
 
class Derived : public Base {
int* data;
public:
Derived() { data = new int[10]; }
~Derived() override { delete[] data; }
};
 
void cleanup() {
Base* ptr = new Derived();
delete ptr; // Calls Derived destructor because Base destructor is virtual
}
Breakdown
1
virtual ~Base()
Declares the destructor as virtual, allowing polymorphic cleanup via pointers.
2
~Derived() override
Provides the specific cleanup logic for the derived class, overriding the base destructor.