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


Scott Meyers 在 Effective C++ 中提到 −

如果一个类具有任何虚函数,则它应具有一个虚析构函数,并且那些并未设计为基类或不用于多态的类不应声明虚析构函数。

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

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

如果 Base 的析构函数不是虚函数,则在这种情况下 delete b 具有未定义的行为。将解析对析构函数的调用,就像针对任何非虚代码那样。因此将调用基类的析构函数,但不调用派生类的析构函数,这将导致资源泄漏。


更新于: 11-Feb-2020

735 次访问

启动你的 职业

完成课程即可获得认证

开始
广告