final
Java と C# は、 andsealed
キーワードを使用して基本クラスとして使用できないクラスの概念をサポートしています 。しかし、C++ では、クラスの作成者にジレンマを残すクラスの派生を防ぐ良い方法はありません。すべてのクラスに仮想デストラクタがあるべきかどうか?
編集: C++11 以降、これは当てはまらないため、クラスが であることを指定できますfinal
。
一方では、オブジェクトに仮想デストラクタを与えることはvtable
、vptr
.
一方、後で誰かがこのクラスから派生し、基本クラスへのポインターを介して派生クラスを削除した場合、プログラムは (仮想デストラクタがないため) 不適切に定義され、率直に言って、オブジェクトごとのポインターを最適化することはばかげている。
仮想デストラクタを持つ握り手で(おそらく)、この型が多態的に使用されることを意図していることをアドバタイズします。
仮想デストラクタを使用しない明確な理由が必要だと考える人もいれば (この質問のサブテキストのように)、クラスが派生すると信じる理由がある場合にのみ仮想デストラクタを使用する必要があると言う人もいます。考える?