写错了吗:
class A {
public:
virtual ~A() = 0;
};
对于抽象基类?
至少在 MSVC 中编译...它会在运行时崩溃吗?
最佳答案
是的。你还需要实现析构函数:
class A {
public:
virtual ~A() = 0;
};
inline A::~A() { }
应该够了。
如果你从 A 派生出任何东西,然后尝试删除或销毁它,A
的析构函数最终会被调用。由于它是纯粹的并且没有实现,因此会出现未定义的行为。在一个流行的平台上,这将调用 purecall 处理程序并崩溃。
编辑:修正声明更符合,编译 http://www.comeaucomputing.com/tryitout/
关于c++ - C++中的纯虚析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/630950/