MISRA C++:2008 Rule 14-5-3
A copy assignment operator shall be declared when there is a template assignment operator with a parameter that is a generic parameter.
説明
ルール定義
A copy assignment operator shall be declared when there is a template assignment operator with a parameter that is a generic parameter. 1
根拠
ユーザー定義の代入演算子を宣言すると、対応する暗黙的演算子が抑止されます。ジェネリック パラメーターを持つテンプレート代入演算子を宣言すると、この動作は維持されません。この場合、暗黙的なシャロー コピー代入演算子を抑止するには、該当するクラスに対して明示的にコピー代入演算子のバージョンをインスタンス化します。
クラスに対してコピー代入演算子を宣言しない場合、コンパイラによって生成されたコピー代入演算子が代わりに実装で使用される可能性があります。明示的にコピー代入演算子を宣言しない場合、ディープ コピーが意図されているのにシャロー コピーが作成されるなど、予期せぬ結果を招く場合があります。
Polyspace 実装
構造体、クラス、または共用体にジェネリック パラメーターを持つテンプレート代入演算子が含まれるが、その構造体、クラス、または共用体内にコピー代入演算子が存在しない場合、Polyspace® はこのチェッカーにフラグを設定します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Templates |
| カテゴリ: 必要 |
バージョン履歴
R2013b で導入
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.