c++ - 使用虚拟析构函数,我是否需要为每个子类显式声明一个虚拟析构函数?

标签 c++ virtual-destructor

我有一个场景,我正在编写一些深入的面向对象的代码,具有多层抽象基类,我想知道是否必须为每一个显式声明一个析构函数。

编译器会生成一个已经是虚拟的默认值,还是我必须告诉它?

最佳答案

默认析构函数不是虚拟的。如果您将基类的析构函数声明为虚拟,则子类的析构函数将被覆盖,因此即使没有明确声明它们也是虚拟的。

如果你有一个类层次结构并且你的基类没有声明析构函数是虚拟的,GNU GCC 编译器甚至会给出警告,因为你很可能希望它是。

关于c++ - 使用虚拟析构函数,我是否需要为每个子类显式声明一个虚拟析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610135/

相关文章:

c++ - 提取所有可能的有序子集

c++ - C++中的析构函数概念

c++ - 什么时候以及为什么不应该将基类中的析构函数定义为虚拟的?

c++ - 如何在 MPI 中 sleep

c++ - 如何提高 std::function 监听器的分发性能?

c++ - 使用继承来减少重复代码的缺点是什么?

c++ - 如何在删除操作中推导出多态对象的大小?

c++ - 如何制作文件名和设置扩展名

C++ 虚拟析构函数

c++11 - Clang 提示 "cannot override a deleted function"而没有删除任何功能