默认的纯虚析构函数

时间:2012-07-15 18:17:33

标签: c++ c++11

在C ++ 11中,我们可以声明一个自动生成的析构函数:

struct X {
  virtual ~X() = default;
};

另外,我们可以将析构函数声明为纯虚拟:

struct X {
  virtual ~X() = 0;
};

我的问题是:如何声明析构函数两者自动生成纯虚拟?看起来以下语法不正确:

struct X {
  virtual ~X() = 0 = default;
};

这两个都不是:

struct X {
  virtual ~X() = 0, default;
};

也不是这个:

struct X {
  virtual ~X() = 0 default;
};

编辑: 对问题的目的作了一些澄清。基本上我希望 empty 类是不可实例化的基类,但派生类是可实例化的,那么该类必须具有纯虚拟析构函数。但另一方面,我不想在.cpp文件中提供定义。所以我需要一些等同于default的机制。我想知道是否有人有想法解决问题。

1 个答案:

答案 0 :(得分:46)

为了定义纯虚方法,需要从声明中单独定义。

因此:

struct X {
    virtual ~X() = 0;
};

X::~X() = default;