默认的纯虚析构函数

Kan*_* Li 33 c++ c++11

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

struct X {
  virtual ~X() = default;
};
Run Code Online (Sandbox Code Playgroud)

此外,我们可以声明析构函数是纯虚拟的:

struct X {
  virtual ~X() = 0;
};
Run Code Online (Sandbox Code Playgroud)

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

struct X {
  virtual ~X() = 0 = default;
};
Run Code Online (Sandbox Code Playgroud)

这两个都不是:

struct X {
  virtual ~X() = 0, default;
};
Run Code Online (Sandbox Code Playgroud)

也不是这个:

struct X {
  virtual ~X() = 0 default;
};
Run Code Online (Sandbox Code Playgroud)

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

Mat*_* M. 47

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

因此:

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

X::~X() = default;
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是不正确的!你仍然需要把行放在`X :: ~X()= default; `进入.cpp文件,否则会出现`multiple definition`链接错误. (4认同)
  • @icando除非你写'inline`; 当"默认"出现时,这并不意味着什么? (3认同)