C++ クラス (またはその親クラスのいずれか) に少なくとも 1 つの仮想メソッドがあるということは、そのクラスに仮想テーブルがあり、すべてのインスタンスに仮想ポインターがあることを意味します。
したがって、メモリのコストは非常に明確です。最も重要なのは、インスタンスのメモリ コストです (特にインスタンスが小さい場合、たとえば整数を格納するだけの場合: この場合、すべてのインスタンスに仮想ポインターがあると、インスタンスのサイズが 2 倍になる可能性があります。仮想テーブルによって使用されるメモリ スペースは、実際のメソッド コードによって使用されるスペースと比較して、通常は無視できると思います。
これは私の質問に私をもたらします: メソッドを仮想化するための測定可能なパフォーマンス コスト (つまり、速度への影響) はありますか? メソッド呼び出しごとに、実行時に仮想テーブルでルックアップが行われるため、このメソッドへの呼び出しが非常に頻繁で、このメソッドが非常に短い場合、測定可能なパフォーマンス ヒットが発生する可能性があります。プラットフォームにもよると思いますが、ベンチマークを実行した人はいますか?
私が尋ねている理由は、プログラマーがメソッド virtual の定義を忘れたことが原因で発生したバグに遭遇したからです。この種の間違いを見るのはこれが初めてではありません。そして、私は考えました: virtual キーワードが必要ないことが絶対に確実なときに削除するのではなく、必要なときに virtual キーワードを追加するのはなぜですか? パフォーマンス コストが低い場合は、チーム内で単純に次のことをお勧めします。すべてのクラスで、デストラクタを含むすべてのメソッドをデフォルトで仮想化し、必要な場合にのみ削除します。それはあなたにとってクレイジーに聞こえますか?