Interactive Computer Science Tutoring

Learn programming concepts interactively

Virtual Destructors

Master polymorphic destruction and prevent memory leaks

Memory: 0MB allocated
Destructor Timeline Simulator
Watch how virtual vs non-virtual destructors affect object destruction

Memory Leak Disaster

Base class without virtual destructor causes incomplete destruction

1. Create DatabaseManagerDatabaseManager
150MB

Allocates database connection (100MB) + cached queries (50MB)

2. Create FileManager partFileManager
175MB

FileManager constructor allocates config file (25MB)

3. Delete via base pointerFileManager
150MB

Only FileManager destructor called - frees config file

4. MEMORY LEAK!DatabaseManager
150MB

DatabaseManager destructor NEVER called - db_connection and cached_queries leaked!

Virtual Destructor Designer
Create classes and see how virtual destructors affect destruction
Memory Health Monitor
Track memory allocation and potential leaks
0MB
Allocated
0MB
Freed
0MB
Leaked
Generated C++ Code
Live C++ representation with highlighted changes
#include <iostream>
#include <memory>
// Example demonstrating virtual destructors
class Base {
public:
virtual ~Base() = default; // Virtual destructor!
};
class Derived : public Base {
private:
int* data;
public:
Derived() : data(new int[1000]) {}
~Derived() override { delete[] data; } // Properly called!
};
int main() {
std::unique_ptr<Base> ptr = std::make_unique<Derived>();
// Destructor chain: Derived::~Derived() -> Base::~Base()
return 0;
}
Virtual Destructor Rules

Rule #1: Virtual destructors for base classes

Any class designed for inheritance should have a virtual destructor: virtual ~ClassName() = default;

Rule #2: Override in derived classes

Use override keyword: ~DerivedClass() override;

Rule #3: Final classes can omit virtual

Classes marked final don't need virtual destructors since they can't be inherited from.

Warning: Memory leaks without virtual destructors

Deleting through base pointers without virtual destructors only calls the base destructor, leaking derived resources.