タグ付けされた質問 「virtual-functions」

8
仮想デストラクタを使用しない場合
私は仮想デストラクターについて何度も検索し、ほとんどが仮想デストラクターの目的と、仮想デストラクターが必要な理由に言及していると信じていました。また、ほとんどの場合、デストラクタは仮想である必要があると思います。 質問は次のとおりです。なぜC ++はデフォルトですべてのデストラクタを仮想に設定しないのですか?または他の質問: 仮想デストラクタを使用する必要がないのはいつですか? どの場合、仮想デストラクタを使用すべきではありませんか? 仮想デストラクタを使用しなくても、それを使用する場合のコストはいくらですか?


3
パブリックメンバーを仮想化または抽象化しないでください-本当にですか?
2000年代に、私の同僚は、パブリックメソッドを仮想または抽象化するのはアンチパターンだと言っていました。 たとえば、彼は次のようなクラスはうまく設計されていないと考えました。 public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // default implementation } } 彼は言った 実装Method1およびオーバーライドする派生クラスの開発者はMethod2、引数の検証を繰り返す必要があります。 場合には、基本クラスの開発者は、カスタマイズの一部の周りに何かを追加することを決定しMethod1たりMethod2、後で、彼はそれを行うことはできません。 代わりに、私の同僚がこのアプローチを提案しました: public abstract class ProtectedAbstractOrVirtual { public void Method1(string argument) { if (argument == null) throw new …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.