小编典典

C++中的纯虚析构函数

all

写错了吗:

class A {
public:
    virtual ~A() = 0;
};

对于抽象基类?

至少在 MSVC 中编译…它会在运行时崩溃吗?


阅读 154

收藏
2022-08-29

共1个答案

小编典典

是的。您还需要实现析构函数:

class A {
public:
    virtual ~A() = 0;
};

inline A::~A() { }

应该足够了。

既然这得到了反对票,我应该澄清一下:如果你从 A 派生任何东西,然后尝试删除或销毁它,A最终将调用 ‘s
的析构函数。由于它是纯粹的并且没有实现,因此会出现未定义的行为。在一个流行的平台上,这将调用 purecall 处理程序并崩溃。

编辑:修复声明更符合,编译与http://www.comeaucomputing.com/tryitout/

2022-08-29