C++ Tutorial
Class and Object
Reference
Inheritance and Derivation
Polymorphism and Virtual Functions
Operator Overloading
Template
Exception
Object Oriented Advanced
Input/Output Stream
File Operations
In C++, destructors play a crucial role in cleaning up resources when objects go out of scope or are explicitly deleted. When dealing with inheritance, understanding how destructors work for both base and derived classes is essential to ensure proper resource management.
In this tutorial, we'll cover destructors for base and derived classes, including the use of virtual destructors.
Example:
#include <iostream> class Base { public: Base() { std::cout << "Base constructor called." << std::endl; } ~Base() { std::cout << "Base destructor called." << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called." << std::endl; } ~Derived() { std::cout << "Derived destructor called." << std::endl; } }; int main() { Derived obj; return 0; }
Output:
Base constructor called. Derived constructor called. Derived destructor called. Base destructor called.
virtual
.Example:
#include <iostream> class Base { public: Base() { std::cout << "Base constructor called." << std::endl; } virtual ~Base() { std::cout << "Base destructor called." << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called." << std::endl; } ~Derived() { std::cout << "Derived destructor called." << std::endl; } }; int main() { Base* basePtr = new Derived(); delete basePtr; return 0; }
Output:
Base constructor called. Derived constructor called. Derived destructor called. Base destructor called.
virtual
in the base class ensures that the correct destructor is called when deleting objects through a base class pointer. If the destructor in the base class is not declared virtual
, only the base class destructor will be called, potentially leading to resource leaks.In summary, when working with base and derived classes in C++, it's important to understand how destructors work in inheritance and the importance of using virtual
destructors. This knowledge will help you create more robust and maintainable code, ensuring proper resource cleanup and preventing memory leaks.
C++ destructors in base and derived classes:
class Base { public: ~Base() { // Base class destructor body } }; class Derived : public Base { public: ~Derived() { // Derived class destructor body } };
Destructors for polymorphic base and derived classes in C++:
class Base { public: // Virtual destructor for polymorphism virtual ~Base() { // Base class destructor body } }; class Derived : public Base { public: // Virtual destructor (implicitly virtual due to the virtual destructor in the base class) ~Derived() { // Derived class destructor body } };
Destructor chaining in C++ with base and derived classes:
class Base { public: ~Base() { // Base class destructor body } }; class Derived : public Base { public: ~Derived() { // Derived class destructor body // Destructor chaining to invoke the base class destructor } };
C++ destructor for pure virtual base class and derived class:
class AbstractBase { public: // Pure virtual destructor virtual ~AbstractBase() = 0; }; // Destructor definition (pure virtual function requires a definition) AbstractBase::~AbstractBase() { // Destructor body } class Derived : public AbstractBase { public: ~Derived() { // Derived class destructor body } };
C++ base class destructor and derived class constructor:
class Base { public: ~Base() { // Base class destructor body } }; class Derived : public Base { public: Derived() { // Derived class constructor body } };
Dynamic memory cleanup in base and derived class destructors in C++:
class DynamicMemoryBase { public: int* dynamicData; // Destructor for dynamic memory cleanup ~DynamicMemoryBase() { delete dynamicData; } }; class Derived : public DynamicMemoryBase { public: ~Derived() { // Derived class destructor body } };