c++ 默认纯虚拟析构函数

在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;
};

编辑:
对这个问题的目的进行一些澄清。基本上我想要一个空类是不可实例化的基类,但派生类是可实例化的,那么该类必须有一个纯虚拟析构函数。但另一方面,我不想在.cpp文件中提供定义。所以我需要一些类似于默认的机制。我想知道有没有人有解决问题的想法。

最佳答案
为了定义纯粹的虚拟方法,您需要从声明中单独定义。

因此:

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

X::~X() = default;

转载注明原文:c++ 默认纯虚拟析构函数 - 代码日志