私は、デスクトップアプリケーションのプロジェクトのためにQT 4.8(C++)を使用して、以下のようにある例外処理を書いています:catchブロックに繰り返しコードを書くことを避けるには?
void callerMethod()
{
try
{
method1();
}
catch(Exception1& e)
{
// display critcal error message
// abort application
}
catch(std::Exception& e)
{
// print exception error message
}
catch(...)
{
// print unknown exception message
}
}
void method1()
{
try
{
// some initializations
// some operations (here exceptions can occur)
// clean-up code (for successful operation i.e no exception occurred)
}
catch(Exception1& e)
{
// clean-up code
throw e;
}
catch(Exception2& e)
{
// clean-up code
throw e;
}
catch(Exception3& e)
{
// clean-up code
throw e;
}
catch(...)
{
// clean-up code
throw;
}
}
だから私の質問は、私はすべてのcatchブロックでクリーンアップコードを記述する必要があります ? できることは何ですか繰り返しコードを書くことを避けますか?
NOTE :: [method1には()]私はその情報が失われるタイプので、私は、単一のcatchブロック、 でそれらをキャッチすることはできません私のcaller.Soに を発生し、再スロー例外をしたいです。
oスマートポインタ、コンテナクラスなどを使用して必要とされるクリーンアップコードの量を減らす。理想的には、クリーンアップコードが全くないはずです。 – user763305
あなたがしたいのは、単純に 'try {/ * throw * /} catch(specific_exception const&e){/ * terminate * /}'です。例外タイプ 'Exception1'、' Exception2'などを気にかけなければ、* catchしないでください。 –
また、参照によってキャッチしても、スライスを防ぐために 'throw e;'の代わりに 'throw;'を使って再スローする必要があります。 – ereOn