サンプルコードに示すようにクラスを基本クラスとして使用している場合は、仮想デストラクタが必要です。また、デストラクタはメソッドなので、これを純粋な仮想( "抽象")デストラクタにして、クラス自体を抽象的にすることができます。次のコードを使用することができますので、実装はまだ、純粋仮想メソッドに提供することができることを
注:オブジェクトを破壊したときに、基本クラスのデストラクタは、常に呼ばれているので
class A
{
public:
virtual ~A() = 0;
/// Some Code
};
class B : public A
{
public:
virtual ~B() = 0;
/// Some Code
};
class C : public B
{
public:
virtual ~C() = 0;
/// Some Code
};
A::~A() { }
B::~B() { }
C::~C() { }
を、派生クラスのデストラクタで明示的に基本クラス実装を呼び出す必要はありません。
これはあなたに望ましい効果を与えるはずです。しかし、私は現在、このデザインの魅力的なアプリケーションを考え出すのに苦労しています。 C++の抽象クラスの全目的は、インターフェイスを定義することです。そのインターフェイスを構成するメソッドが定義されていない限り、インターフェイスを持つことはできません。私はちょうど十分に巧みではないか、あるいはあなたのデザインを考え直すべきです。
純粋な仮想デストラクタを作成します。または、保護されたコンストラクタのみを許可する。 –
あなたはクラス継承をまったく必要としない可能性があります。代わりにHAS-A関係を考慮する。 –