AUTOSAR C++14 Rule A15-3-5
A class type exception shall be caught by reference or const reference
説明
ルール定義
クラス型の例外は、参照または const 参照によってキャッチするものとします。
根拠
クラス型の例外が値によってキャッチされると、例外オブジェクトがスライスされる可能性があります。次に例を示します。
class baseException(); 
class derivedException : public baseException {}; 
void foo() { 
	try { 
		//... 
		throw derivedException(); 
	} 
	catch (baseException e) { //slices the thrown exception 
		//... 
	} 
} foo() 内の catch ブロックで derivedException オブジェクトがキャッチされる場合、そのオブジェクトは derivedException オブジェクトの状態に維持されると想定されます。このオブジェクトは値によってキャッチされるため、baseException オブジェクトにスライスされます。想定外のオブジェクトのスライスは、実行時に予期しないコードの動作につながるリスクがあります。オブジェクトのスライスを回避するには、参照または const 参照によってクラス型の例外をキャッチします。 Polyspace 実装
Polyspace® は、クラス型の例外を値によってキャッチする catch ステートメントにフラグを設定します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Exception Handling | 
| カテゴリ: Required、Automated | 
バージョン履歴
R2019a で導入