class Object {
public:
...
virtual ~Object() = 0;
...
};
Object::~Object() {} // Should we always define the pure virtual destructor outside?
Run Code Online (Sandbox Code Playgroud)
问题:我们是否应该始终在类定义之外定义纯虚拟析构函数?
换句话说,这是我们不应该内联定义任何虚函数的原因吗?
谢谢
您可以内联定义虚函数.您无法内联定义纯虚函数.
不允许使用以下语法变体:
virtual ~Foo() = 0 { }
virtual ~Foo() { } = 0;
Run Code Online (Sandbox Code Playgroud)
但这完全有效:
virtual ~Foo() { }
Run Code Online (Sandbox Code Playgroud)
如果要实例化它或子类,则必须定义纯虚析构函数,参考文献12.4/7:
析构函数可以声明为虚拟(10.3)或纯虚拟(10.4); 如果在程序中创建了该类或任何派生类的任何对象,则应定义析构函数.如果类具有带虚拟析构函数的基类,则其析构函数(无论是用户还是隐式声明)都是虚拟的.