[英]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.