虚拟析构函数的用途是什么
What is the usage of virtual destructor?
用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 的析构函数,这是一个严重的问题。
相关文章:
- C++:使用方法调用析构函数的顺序是什么?
- 在析构函数中删除单链表的正确方法是什么?
- 应该是虚拟析构函数吗?但是怎么做呢?
- 什么是带有友元说明符的析构函数
- 这是删除析构函数中的数组的正确方法吗?
- 在C++中为临时库调用析构函数的顺序是什么
- 虚拟析构函数的用途是什么
- Qt:写这个类的析构函数的正确和安全的方法是什么
- 在C++中,析构函数的调用顺序和成员变量的销毁顺序是什么
- C++11 中默认虚拟析构函数的异常规范是什么?
- 调用析构函数以释放C++运算符中的内存的正确方法是什么
- 这个枚举在析构函数中的用途是什么
- 为这个二进制节点类创建析构函数的正确方法是什么
- 我的析构函数需要在这个函数中是什么
- 当您有一个二维数组(C++)时调用析构函数的正确方法是什么?
- 传递到虚拟析构函数的这个额外参数是什么?
- 关于隐式删除虚析构函数的错误信息是什么?
- 变量或对象的内存在程序结束时自动终止,而不是使用析构函数
- 为什么是虚析构函数
- gcov报告的析构函数中的分支是什么?