delegate
パターンでは仮想化するのが良いですdestuctor
か?
class MyClass
{
...
};
class MyClassDelegate
{
...
};
一方ではクラスはインターフェイスであり、継承されることになっていますが、他方ではポインターを介してMyClassDelegate
継承されることは想定されていませdelete
んsubclass
MyClassDelegate
どう思いますか ?
delegate
パターンでは仮想化するのが良いですdestuctor
か?
class MyClass
{
...
};
class MyClassDelegate
{
...
};
一方ではクラスはインターフェイスであり、継承されることになっていますが、他方ではポインターを介してMyClassDelegate
継承されることは想定されていませdelete
んsubclass
MyClassDelegate
どう思いますか ?
保護された非仮想にすることを検討できます。実際には、そのようなポインターを使用してオブジェクトを削除できないという事実を強制し、文書化しています。いくつかのより多くの議論はここで見つけることができます
クラスをから継承することを計画している場合はMyClassDelegate
、仮想デストラクタを与えるのが最善です。
最初の設計では、へdelete
のポインタを計画しない場合がありますMyClassDelegate
が、この設計は進化し、選択によって、これがどのように進化するかについて制約が課せられます。この特定の制約は忘れがちであり、結果として生じるクラッシュ(または微妙なバグ)は診断に時間がかかる場合があります。
すでに他の仮想関数がある場合にデストラクタを仮想化すると、オーバーヘッドはほとんど発生しません。