好的,今天我遇到了这个问题,那时TI TMS470 C ++编译器拒绝接受它。
这来自“Head First Design Patterns”示例代码的C ++翻译的Silver版本。
class foo {
...
protected:
virtual ~foo() = 0 {}; // compiler barfs on this line
};
编译器拒绝接受“= 0”(纯虚拟)和“{}”的组合(我猜这是让派生类无论如何都要抛出析构函数。
他们究竟在尝试使用这条线,它真的是合法的C ++,它有多重要?
答案 0 :(得分:8)
这不是合法的C ++。纯虚函数可以有一个正文,但定义必须是在课外进行的。
在这种特殊情况下(函数是析构函数),如果在程序中的任何地方使用类,则函数必须具有一个主体(即,如果它在某处被用作基类,那么这是可以使用抽象类的唯一方法。
确定整个事情的正确方法如下
class foo {
...
protected:
virtual ~foo() = 0;
};
inline foo::~foo()
{
}