C ++ - 我们为什么要在类定义之外定义纯虚析构函数?

时间:2011-03-10 17:38:18

标签: c++

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

Object::~Object() {} // Should we always define the pure virtual destructor outside?

问题:我们是否应该始终在类定义之外定义纯虚拟析构函数?

换句话说,我们不应该内联定义任何虚函数?

谢谢

2 个答案:

答案 0 :(得分:7)

您可以内联定义虚拟功能。您无法内联定义纯虚拟函数。

以下语法变体是不允许的:

virtual ~Foo() = 0 { }
virtual ~Foo() { } = 0;

但这完全有效:

virtual ~Foo() { }

如果要实例化它或子类,则必须定义纯虚析构函数,参考文献12.4 / 7:

  

析构函数可以声明为虚拟   (10.3)或纯虚拟(10.4);如果有的话   该类的对象或任何派生的对象   类是在程序中创建的   应定义析构函数。如果一个   class有一个带虚拟的基类   析构函数,它的析构函数(是否   user-或implicitly-declared)是   虚拟

答案 1 :(得分:-1)

根据定义,纯虚函数没有实现。它应该由子类实现。

如果你想链接析构函数,只需保持虚拟(非纯虚拟)。