具有默认关键字的纯虚拟析构函数

时间:2015-07-29 20:10:59

标签: c++ c++11 virtual-functions

是否可以将析构函数声明为纯虚拟并使用default关键字?例如,我似乎无法使代码像这样工作:

class MyClass
{
public:
  // Is there a way to combine pure virtual and default?
  virtual ~ MyClass() = 0,default;
};

当然可以稍后做:

MyClass::~ MyClass() = default;

此外,如果析构函数不是纯虚拟的,则默认关键字在声明后面会起作用。

3 个答案:

答案 0 :(得分:7)

你必须在那里写一个单独的定义和default,如你所示。

纯指定符的存在排除了在同一位置存在定义,即使该定义只是= default

答案 1 :(得分:2)

不,这是不可能的。

通过使用= default说明符声明成员函数,您将提供函数定义。

从C ++ 14标准的工作草案(N3936):

  

§10.4注意:函数声明不能​​同时提供纯指定符和定义

https://github.com/cplusplus/draft/raw/b7b8ed08ba4c111ad03e13e8524a1b746cb74ec6/papers/N3936.pdf

答案 2 :(得分:-4)

这个问题有点像非首发,无论如何you can only have one destructor。为什么需要添加default说明符?