c++再放出異常

1209 ワード

単一catchでは例外を完全に処理できない可能性があります.この場合、いくつかの処理が行われた後、例外を再放出し、関数呼び出しチェーンのより上位の関数で処理する必要があります.再放出は「throw;」文は実装され、throw後には式やタイプが付いていません.
“throw;”例外オブジェクトが再放出され、catchまたはcatchで呼び出された関数にのみ表示されます.他の場所に表示されるとterminate関数が呼び出されます.
再投げ出された異常は元の異常オブジェクトでありcatchパラメータではない.この例外タイプは、catchパラメータの静的タイプではなく、例外オブジェクトの動的タイプに依存します.たとえば、ベースクラスタイプのパラメータcatchからの再放出は、実際に派生クラスオブジェクトを放出する可能性があります.
例外説明子が参照である場合にのみ、catchでのパラメータの変更は、再放出された例外オブジェクトに伝播します.
catch (my_error & eObj) {   
  eObj.status = severeErr; 
  throw; // the status member of the exception object is severeErr
} catch (other_error eObj) {
  eObj.status = badErr;
  throw;  // the status member of the exception rethrown is unchanged
}

【学習資料】『c++primer』