AUTOSAR C++14 Rule A12-8-6
Copy and move constructors and copy assignment and move assignment operators shall be declared protected or defined "=delete" in base class
説明
ルール定義
コピー コンストラクター、移動コンストラクター、コピー代入演算子、および移動代入演算子は、基底クラスで protected と宣言するか、"=delete" と定義するものとします。
根拠
派生クラスへのポインターは、基底クラスへのポインターと型互換性があります。ポインターは、派生クラスのオブジェクトを指しながら、基底クラスのオブジェクトにすることができます。このようなオブジェクトがコピーされると、基底コピー コンストラクターが呼び出され、コピーされたオブジェクトは元のオブジェクトの基底部分だけになります。コピーおよび移動時に誤ってスライスが行われないようにするために、次の方法で基底クラスでのこのような操作を抑制します。
コピー コンストラクター、移動コンストラクター、コピー代入演算子、および移動代入演算子を
protectedとして宣言する。コピー コンストラクター、移動コンストラクター、コピー代入演算子、および移動代入演算子を
=deleteとして定義する。
Polyspace 実装
Polyspace® は、基底クラスの以下の特殊なメンバー関数が protected として宣言されていないか、=delete として定義されていない場合にフラグを設定します。
コピー コンストラクター
移動コンストラクター
コピー代入演算子
移動代入演算子
Polyspace は、このルールに反する特殊なメンバー関数を示します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 特殊なメンバー関数 |
| カテゴリ: Required、Automated |
バージョン履歴
R2020a で導入