在 C++ 中何时使用虚析构函数?
Scott Meyers 在 Effective C++ 中提到 −
如果一个类具有任何虚函数,则它应具有一个虚析构函数,并且那些并未设计为基类或不用于多态的类不应声明虚析构函数。
因此应在多态基类中将析构函数声明为虚函数。这是因为如果使用派生构造函数通过基类创建对象 −
Base *b = new Derived(); // use b delete b;
如果 Base 的析构函数不是虚函数,则在这种情况下 delete b 具有未定义的行为。将解析对析构函数的调用,就像针对任何非虚代码那样。因此将调用基类的析构函数,但不调用派生类的析构函数,这将导致资源泄漏。
广告