繁体   English   中英

C++中的纯虚析构函数

[英]Pure virtual destructor in C++

写错了吗:

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

对于抽象基础 class?

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

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

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

inline A::~A() { }

应该足够了。

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

编辑:修复声明以更符合要求,使用http://www.comeaucomputing.com/tryitout/编译

私有析构函数:当您创建派生 class 的 object 时,它们会给您一个错误——否则不会。 但可能会出现诊断。

12.4 析构函数

6 析构函数可以声明为虚拟(10.3)或纯虚拟(10.4); 如果在程序中创建了该 class 或任何派生的 class 的任何对象,则应定义析构函数。

带有纯虚析构函数的 class 是抽象的 class。 请注意:

10.4 抽象类

2 纯虚拟 function 仅在使用或如同使用 (12.4) 限定 ID 语法 (5.1) 调用时才需要定义。

[:function 声明不能同时提供纯说明符和定义——尾注]

直接取自草稿:

struct C {
   virtual void f() = 0 { }; // ill-formed
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM