c++ - 编译器生成的抽象基类的析构函数是虚拟的吗?

标签 c++ abstract-class destructor compiler-generated

class Base
{
    virtual void foo() = 0;
    //~Base();     <-- No destructor!
};

显然,Base 将被派生。那么,C++ 是否规定 Base 的编译器生成的析构函数必须是虚拟的?

谢谢!

最佳答案

不,析构函数不会是 virtual 除非你这样标记它。原因很简单 - 调用实际上可以通过指针和引用进行,并且您如何以及是否进行虚拟调用与您是否使用 new 创建对象无关。如果您不使用 new 创建对象,则不必 delete 它们,因此您不需要虚拟析构函数。

关于c++ - 编译器生成的抽象基类的析构函数是虚拟的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041886/

相关文章:

c++ - 声明从抽象类继承的继承抽象方法是否有任何性能问题?

java - 从本地方法抽象内部类扩展后,无法将内部类中的方法设置为私有(private)

javascript - JS字符串解构: rest parameter returning inconsistent data

c++ - MFC :GetFile(Download) issue 中的 FTPClient

c++ - 中断 native 函数内 v8 脚本的执行

c++ - 在 C++ 中查找数组中总和为零的所有唯一三元组

c++ - 插入 map 时多次调用析构函数

c++ - 每次调用工作负载非常低的连续并行计算

java 子类 : multiple constructors inherited from abstract superclass

c++ - 预期对析构函数有 2 次调用,但只得到 1 次