c++ - C++中的纯虚析构函数

标签 c++ polymorphism destructor pure-virtual

写错了吗:

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/

相关文章:

jakarta-ee - Java,如何在对象销毁时终止进程

wcf - 为什么当我关闭客户端应用程序而不在客户端调用 "Close"方法时 WCF 不销毁对象?

c++ - 在 Singleton 设计模式的情况下,我们如何使析构函数私有(private)化?

具有在 2 个不同子类中实现的虚拟方法的 C++ 父类

java - 多态性和基于实例的switch case

c++ - 理性类和 move 语义不起作用

c++ - 为什么使用 SomeType[1] 而不是 SomeType* 作为结构中的最后一个成员

java - 子类对象只能从父类(super class)对象继承某些参数吗?

c++ - string::erase(0) 在空字符串上?

c++ - boost::spirit 绑定(bind)函数提供参数作为 spirit:qi::_val