このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
オブジェクト指向の欠陥
C++ オブジェクト指向プログラミングに関連する欠陥 (クラス設計の問題や継承階層での問題など)
これらの欠陥は C++ プログラミングのオブジェクト指向の側面に関連しています。この欠陥では、クラスの設計での問題や継承階層における問題が強調表示されます。欠陥には次のものがあります。
データ メンバーがコンストラクター内で初期化されないか不適切に初期化される
基底クラスのメソッドが不適切にオーバーライドされる
データのカプセル化が破壊される
Polyspace 結果
*this はコピー代入演算子に返されません | operator= メソッドが現在のオブジェクトを指すポインターを返さない |
基底クラスの代入演算子が呼び出されていません | コピー代入演算子が、基底サブオブジェクトのコピー代入演算子を呼び出さない |
基底クラス デストラクターが非バーチャルです | 派生クラス オブジェクトの削除にあたりクラスがポリモーフィックに動作できない |
非トリビアルなクラス オブジェクトのバイト演算 | 値の表現が不適切に初期化または比較される可能性がある |
不完全なクラス ポインターの変換または削除 | 不完全なクラスを指すポインターの削除またはキャスト |
ソース オペランドを変更するコピー コンストラクターまたは代入演算子 | コピー操作によるソース オブジェクトのデータ メンバーの変更 |
コピー コンストラクターが初期化リストで呼び出されていません | コピー コンストラクターが一部のメンバーまたは基底クラスのコピー コンストラクターを呼び出さない |
型に互換性がないためオーバーライドされません | 派生クラスのメソッドが virtual 基底クラスのメソッドをオーバーライドせずに隠している |
typeid のオペランドとしてラムダが使用されています | ラムダ式で typeid が使用されている |
コンストラクターでメンバーが初期化されません | コンストラクターでクラスのメンバーの一部が初期化されない |
明示的なキーワードがありません | コンストラクターまたはユーザー定義変換演算子に指定子 explicit がない |
バーチャル継承がありません | 基底クラスが同じ階層内でバーチャルに継承され、また非バーチャルに継承されている |
オブジェクトのスライス | 派生クラス オブジェクトが基底クラス パラメーターをもつ関数に値渡しされる |
オーバーアラインの可能性のあるクラスの演算子 new がオーバーロードされていません | 割り当てられたストレージがオブジェクトのアライメント要件よりも小さい可能性がある |
オーバーロードされたバーチャル関数の一部のみをオーバーライドします | 特定名をもつ継承されたバーチャル関数の一部をクラスがオーバーライド |
カプセル化されたデータ メンバーに定数ではないハンドルが返されています | メソッドにより、オブジェクトの内部メンバーへのポインターまたは参照が返される |
自己代入が演算子でテストされていません | コピー代入演算子で自己代入がテストされない |
トピック
- Bug Finder 欠陥グループ
Bug Finder の欠陥チェッカーは、データ フロー、同時実行、数値などのグループに分類されています。