写道:
class A { public: virtual ~A() = 0; };
抽象基类?
至少在 MSVC 中编译... 它会在运行时崩溃吗?
是的,您还需要实现析构函数:
class A { public: virtual ~A() = 0; }; inline A::~A() { }
应该够了。
如果您从 A 中获取任何内容,然后尝试删除或销毁它,那么最终将调用 A的析构函数。由于它是纯粹的,而且没有实现,未定义行为将随之而来。在一个流行的平台上,这将调用 puretechandlder 并导致崩溃。
A
编辑: 修改声明使其更符合 http://www.comeaucomputing.com/tryitout/编译
私有析构函数: 当您创建派生类的对象时,它们会给您一个错误——否则不会。不过,可能会出现一种诊断。
12.4毁灭者 6析构函数可以声明为虚(10.3)或纯虚(10.4) ; 如果在程序中创建了该类的任何对象或任何派生类,则应定义析构函数。
12.4毁灭者
6析构函数可以声明为虚(10.3)或纯虚(10.4) ; 如果在程序中创建了该类的任何对象或任何派生类,则应定义析构函数。
具有纯虚析构函数的类是抽象类。 请注意:
10.4抽象类 2只有在使用限定 -id 语法(5.1)或类似于使用(12.4)调用时,才需要定义纯虚函数。 [ 注意: 函数声明不能同时提供纯说明符和定义ー end 注]
10.4抽象类
2只有在使用限定 -id 语法(5.1)或类似于使用(12.4)调用时,才需要定义纯虚函数。
[ 注意: 函数声明不能同时提供纯说明符和定义ー end 注]
直接从草案中摘录:
struct C { virtual void f() = 0 { }; // ill-formed };