In C++, if you want to ensure that the appropriate destructors (including those of the base and derived classes) are called when deleting a pointer to a derived class, you must declare the destructor as virtual in the base class. This enables polymorphism, allowing the correct destructor sequence to be invoked when deleting through a base class pointer.
Example Illustration
Assume a base class Base and a derived class Derived from Base.
cpp#include <iostream> class Base { public: Base() { std::cout << "Base constructor called\n"; } virtual ~Base() { std::cout << "Base destructor called\n"; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called\n"; } ~Derived() override { std::cout << "Derived destructor called\n"; } }; int main() { Base* b = new Derived(); delete b; // Correctly invokes the Derived destructor, then the Base destructor return 0; }
Output
shellBase constructor called Derived constructor called Derived destructor called Base destructor called
Conclusion
By making the base class destructor virtual, it ensures the correct release of resources and proper cleanup of objects during destruction, which is an important and safe practice for handling polymorphic objects.
2024年6月29日 12:07 回复