Learn programming concepts interactively
Master polymorphic destruction and prevent memory leaks
Base class without virtual destructor causes incomplete destruction
Allocates database connection (100MB) + cached queries (50MB)
FileManager constructor allocates config file (25MB)
Only FileManager destructor called - frees config file
DatabaseManager destructor NEVER called - db_connection and cached_queries leaked!
#include <iostream>#include <memory>// Example demonstrating virtual destructorsclass 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;}
Any class designed for inheritance should have a virtual destructor: virtual ~ClassName() = default;
Use override
keyword: ~DerivedClass() override;
Classes marked final
don't need virtual destructors since they can't be inherited from.
Deleting through base pointers without virtual destructors only calls the base destructor, leaking derived resources.