虚拟析构函数的用途是什么

What is the usage of virtual destructor?

本文关键字:是什么 析构函数 虚拟      更新时间:2023-10-16

用C++编写虚拟析构函数有什么用,像这样:

class CMyObject
{
   CMyObject(void) {};
   virtual ~CMyObject(void) {};
}

这样您就可以正确销毁(和解除分配)不同大小的 CMyObject 子类对象的数组。

虚拟析构函数允许 CMyObject 的子类重写~CMyObject(void)并正确清理它拥有的任何其他属性。

例如,如果扩展 CMyObject 以拥有指向某个数组的指针,并为该数组分配内存,则必须在子类的析构函数中清理它,因为它不会由超类 (CMyObject) 的析构函数处理。

简单的例子:

class Foo {};
class Bar : Foo {};
Foo * obj = new Bar();
delete obj;

在这种情况下,如果没有 Foo 中的虚拟析构函数,将不会调用 Bar 的析构函数,这是一个严重的问题。