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

In order to define a pure virtual method, you need a separate definition from the declaration.

Therefore:

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

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