Iva*_*tov 158 c++ polymorphism destructor pure-virtual
写错是不对的:
class A {
public:
virtual ~A() = 0;
};
Run Code Online (Sandbox Code Playgroud)
对于抽象基类?
至少在MSVC中编译......它会在运行时崩溃吗?
MSN*_*MSN 209
是.您还需要实现析构函数:
class A {
public:
virtual ~A() = 0;
};
inline A::~A() { }
Run Code Online (Sandbox Code Playgroud)
应该足够了.
由于这得到了投票,我应该澄清:如果你从A派生任何东西,然后尝试删除或销毁它,A最终会被调用析构函数.由于它是纯粹的并且没有实现,因此将产生未定义的行为.在一个流行的平台上,它将调用purecall处理程序并崩溃.
编辑:修改声明更符合,使用http://www.comeaucomputing.com/tryitout/编译
dir*_*tly 48
私有析构函数:当您创建派生类的对象时,它们会给您一个错误 - 否则.但是可能会出现诊断.
12.4析构函数
6析构函数可以声明为虚拟(10.3)或纯虚拟(10.4); 如果在程序中创建了该类或任何派生类的任何对象,则应定义析构函数.
具有纯虚析构函数的类是抽象类.注意:
10.4抽象类
2只有在使用(12.4)qualified-id语法(5.1)调用时,才需要定义纯虚函数.
[ 注意:函数声明不能同时提供纯指定符和定义-end note]
从草案中直接采取:
struct C {
virtual void f() = 0 { }; // ill-formed
};
Run Code Online (Sandbox Code Playgroud)