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

Jul*_*n-L 5 c++ abstract-class destructor compiler-generated

class Base
{
    virtual void foo() = 0;
    //~Base();     <-- No destructor!
};
Run Code Online (Sandbox Code Playgroud)

显然,Base将得出.那么,C++是否说编译器生成的析构函数Base必须是虚拟的?

谢谢!

sha*_*oth 6

不,析构函数不会被virtual删除,除非你标记它.原因很简单 - 几乎可以通过指针和引用来调用,以及如何以及是否进行虚拟调用与是否使用创建对象无关new.如果您不创建对象,new则不需要delete它们,因此您不需要虚拟析构函数.