C ++中的纯虚拟析构函数

写错了吗?

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

为抽象的基类?

至less在MSVC编译…会在运行时崩溃吗?

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

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

应该足够了。

而且由于得到了一个反对票,所以我应该澄清一下:如果你从A中得到任何东西,然后试图删除或者销毁它, A的析构函数最终会被调用。 由于它是纯粹的,并没有一个实现,未定义的行为将随之而来。 在一个stream行的平台上,这将调用纯调用处理程序和崩溃。

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

私有析构函数:当你创build一个派生类的对象时,它们会给你一个错误 – 否则。 诊断可能会出现。

12.4破坏者

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

一个纯虚析构函数的类是一个抽象类。 请注意:

10.4抽象类

2纯虚函数只有在用(12.4)的限定符语法(5.1)调用时才需要定义。

[ :一个函数声明不能​​同时提供一个纯粹的说明符和一个定义 – 结束注释]

从草稿中直接获取:

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