繁体   English   中英

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

[英]C++ — why should we define the pure virtual destructor outside the class definition?

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

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

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

换句话说,这是我们不应该内联定义任何虚函数的原因吗?

谢谢

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

不允许使用以下语法变体:

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

但这完全有效:

virtual ~Foo() { }

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

析构函数可以声明为虚拟(10.3)或纯虚拟(10.4); 如果在程序中创建了该类或任何派生类的任何对象,则应定义析构函数。 如果类具有带虚拟析构函数的基类,则其析构函数(无论是用户还是隐式声明)都是虚拟的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM