1

delegateパターンでは仮想化するのが良いですdestuctorか?

class MyClass
{
    ...
};

class MyClassDelegate
{
    ...
};

一方ではクラスはインターフェイスであり、継承されることになっていますが、他方ではポインターを介してMyClassDelegate継承されることは想定されていませdeletesubclassMyClassDelegate

どう思いますか ?

4

3 に答える 3

5

保護された非仮想にすることを検討できます。実際には、そのようなポインターを使用してオブジェクトを削除できないという事実を強制し、文書化しています。いくつかのより多くの議論はここで見つけることができます

于 2012-08-01T07:52:15.430 に答える
0

クラスをから継承することを計画している場合はMyClassDelegate、仮想デストラクタを与えるのが最善です。

最初の設計では、へdeleteのポインタを計画しない場合がありますMyClassDelegateが、この設計は進化し、選択によって、これがどのように進化するかについて制約が課せられます。この特定の制約は忘れがちであり、結果として生じるクラッシュ(または微妙なバグ)は診断に時間がかかる場合があります。

于 2012-08-01T08:06:48.657 に答える
0

すでに他の仮想関数がある場合にデストラクタを仮想化すると、オーバーヘッドはほとんど発生しません。

于 2012-08-01T07:46:26.463 に答える