乐闻世界logo
搜索文章和话题

Does delete on a pointer to a subclass call the base class destructor?

1个答案

1

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

shell
Base 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 回复

你的答案