AUTOSAR C++14 Rule A12-8-1
Move and copy constructors shall move and respectively copy base classes and data members of a class, without any side effects
R2021a 以降
説明
ルール定義
Move and copy constructors shall move and respectively copy base classes and data members of a class, without any side effects.
根拠
移動コンストラクターとコピー コンストラクターの想定される動作は次のとおりです。
これらのコンストラクターは、基底クラスとデータ メンバーを移動またはコピーします。
移動コンストラクターは、ソース オブジェクトを有効な状態に設定します。
二次的影響のある移動コンストラクターまたはコピー コンストラクターを作成すると、次の問題を引き起こす可能性があります。
パフォーマンス:移動コンストラクターとコピー コンストラクターは、標準テンプレート ライブラリ (STL) のアルゴリズムとコンテナーから頻繁に呼び出されます。二次的影響によって引き起こされるこれらのコンストラクターのパフォーマンス オーバーヘッドが蓄積し、コードのパフォーマンスに影響する可能性があります。
予期しない動作:コンパイラがコードを最適化するためにコピー コンストラクターへの呼び出しを省略する場合があるため、コピー コンストラクターが呼び出される回数は不確定です。そのため、コピー コンストラクターの二次的影響が予期せぬ動作を招く可能性があります。
Polyspace 実装
コピー コンストラクターまたは移動コンストラクターの本体で、Polyspace® は次のような演算にはフラグを設定しません。
コピー代入または移動代入。
関係演算または比較演算。
移動演算でのソース オブジェクトの変更。
関数
std::swapまたは等価なユーザー定義noexceotスワップ関数の呼び出し。Polyspace はシグネチャがvoid T::swap(T&)またはvoid [N::]swap(T&, T&)である関数をスワップ関数として識別します。最初のシグネチャは、1 つの引数を取るクラスTのメンバー関数を表します。2 番目のシグネチャは、2 つの引数を取る名前空間N内の非メンバー関数または静的関数を表します。swapという名前の大文字と小文字は区別されず、先頭または末尾にアンダースコアを付加できます。変数
staticの代入と変更。
Polyspace は、コピー コンストラクターまたは移動コンストラクター内の他の演算に望ましくない二次的影響としてフラグを設定します。たとえば、ユーザー定義スワップ関数が noexcept ではない場合、そのスワップ関数の呼び出しは望ましくない二次的影響と見なされます。コピー代入演算子と移動代入演算子に関する同様のルールについては、AUTOSAR C++14 Rule A6-2-1 を参照してください。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 特殊なメンバー関数 |
| カテゴリ: Required、Automated |
バージョン履歴
R2021a で導入