基底クラス デストラクターが非バーチャル
派生クラス オブジェクトの削除にあたりクラスがポリモーフィックに動作できない
説明
この欠陥は、クラスに関数 virtual はあるが、virtual デストラクターがない場合に発生します。
リスク
virtual 関数の存在により、そのクラスは基底クラスとしての使用が想定されていることが示されます。しかし、クラスに virtual デストラクターがない場合は、派生クラス オブジェクトの削除にあたりポリモーフィックに動作できません。
このクラスを指すポインターが派生クラス オブジェクトを参照し、ポインターを使用してオブジェクトを削除する場合、基底クラス デストラクターのみが呼び出されます。派生クラスに割り当てられている追加リソースは解放されず、リソース リークの原因となることがあります。
修正方法
1 つの修正方法として、virtual 関数を含むクラス内の virtual デストラクターを常に使用します。
例
結果情報
| グループ: オブジェクト指向 |
| 言語: C++ |
| 既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: DTOR_NOT_VIRTUAL |
| 影響度: Medium |
バージョン履歴
R2015b で導入