How do I use virtual destructors correctly?

Using virtual destructors in C++ is essential for proper resource management in cases where you have inheritance and dynamic memory allocation. A virtual destructor ensures that when an object of a derived class is deleted through a base class pointer, the derived class's destructor is called first, allowing for proper cleanup of resources. This helps prevent memory leaks and undefined behavior.

Example of Virtual Destructor Usage


class Base {
public:
    virtual ~Base() {
        // Base destructor logic
        std::cout << "Base destructor called" << std::endl;
    }
};

class Derived : public Base {
public:
    ~Derived() {
        // Derived destructor logic
        std::cout << "Derived destructor called" << std::endl;
    }
};

int main() {
    Base* obj = new Derived();
    delete obj; // This will call Derived destructor first, then Base destructor
    return 0;
}
    

virtual destructor C++ inheritance memory management polymorphism resource cleanup