C++ Destructor

概述

析构函数可以声明为虚函数。

作用:基类的指针指向派生类对象时,可以用基类的指针删除派生类对象,防止内存泄露。详见 virtual

声明为虚函数的场景:某个类被作为基类使用时。

不建议声明为虚函数的场景:某个类不准备作为基类使用(不包含虚函数成员)时,如果声明析构函数为虚函数,在构造类对象时,会创建一个虚函数表,增加对象的内存占用,还有可能降低可移植性。

当析构函数声明为虚函数,用基类指针指向派生类对象时,执行 delete 会调用派生类的析构函数,派生类的析构函数又会自动调用基类的析构函数,从而使整个对象的资源被完全释放。
如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,就只会调用基类的析构函数而不调用派生类的析构函数,导致派生类对象析构不完全,造成内存泄漏。

无故的声明虚析构函数和永远不去声明一样是错误的。

参考文献


C++ Destructor
https://laplac2.github.io/cpp/destructor/
作者
Laplace
发布于
2022年3月18日
许可协议