class Object {
public:
...
virtual ~Object() = 0;
...
};
Object::~Object() {} // Should we always define the pure virtual destructor outside?
问题:我们是否应该始终在类定义之外定义纯虚拟析构函数?
换句话说,我们不应该内联定义任何虚函数?
谢谢
答案 0 :(得分:7)
您可以内联定义虚拟功能。您无法内联定义纯虚拟函数。
以下语法变体是不允许的:
virtual ~Foo() = 0 { }
virtual ~Foo() { } = 0;
但这完全有效:
virtual ~Foo() { }
如果要实例化它或子类,则必须定义纯虚析构函数,参考文献12.4 / 7:
析构函数可以声明为虚拟 (10.3)或纯虚拟(10.4);如果有的话 该类的对象或任何派生的对象 类是在程序中创建的 应定义析构函数。如果一个 class有一个带虚拟的基类 析构函数,它的析构函数(是否 user-或implicitly-declared)是 虚拟
答案 1 :(得分:-1)
根据定义,纯虚函数没有实现。它应该由子类实现。
如果你想链接析构函数,只需保持虚拟(非纯虚拟)。