41

在 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 文件中提供定义。所以我需要某种与default. 我想知道是否有人有解决问题的想法。

4

1 回答 1

58

为了定义一个纯虚方法,你需要一个独立于声明的定义。

所以:

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

X::~X() = default;
于 2012-07-15T18:54:55.970 回答