在 C++ 中何时使用虚拟析构函数?


Scott Meyers 在《高效 C++》中这样说道 −

如果一个类有任何虚函数,它应该有一个虚析构函数,而未设计为基类或未设计为以多态方式使用的类不应声明虚析构函数。

因此,你应该在多态基类中将析构函数声明为虚函数。这是因为,如果你使用派生构造函数创建基类的对象 −

Base *b = new Derived();
// use b
delete b;

如果 Base 的析构函数不是虚函数,那么在这种情况下 delete b 会产生未定义的行为。对于析构函数的调用将像任何非虚代码一样得到解决。因此,将对基类的析构函数进行调用,但是不对派生类的析构函数进行调用,这将导致出现资源泄漏。


更新时间: 2020 年 2 月 11 日

735 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告