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
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.