、我々は、オートようにデストラクタを宣言することができます生成:デフォルト純粋仮想デストラクタ
struct X {
virtual ~X() = default;
};
また、私たちは純粋仮想するデストラクタを宣言することができます。
struct X {
virtual ~X() = 0;
};
私の質問は:どのようにデストラクタをの両方を生成すると宣言すると純粋な仮想?次の構文のように見えるが正しくありません:
struct X {
virtual ~X() = 0, default;
};
も、この1:
struct X {
virtual ~X() = 0 default;
};
EDIT:質問の目的上 いくつかの明確化
struct X {
virtual ~X() = 0 = default;
};
どちらもこの一つです。基本的には空のクラスをインスタンス化不可能な基本クラスにしたいが、派生クラスはインスタンス化可能です。その場合、クラスには純粋な仮想デストラクタが必要です。しかし一方で、私は.cppファイルで定義を提供したくありません。だから私はdefault
に相当する何らかの仕組みが必要です。誰かが問題を解決するアイデアを持っているのだろうかと思います。
あなたは '仮想〜X()= 0 {}'行うことができますか?今あなたがしようとしていることをもう一度考えてみましょう。 – Xeo
@ Xeo:はいできます。しかし、その構文ではありません。非インライン実装を提供する必要があります。すべての純粋仮想関数はデフォルト実装を持つことができます。つまり、非抽象派生クラス*は関数を実装する必要がありますが、実装の一部として親のデフォルト実装を呼び出す必要があります。 – JohannesD
@JohannesD:Michalの答えに対する私のコメントを参照してください。しかし、 '= default'は基本的に' {} 'クラス内です(メンバーがいない場合)。 – Xeo