デスクトップアプリケーションプロジェクトにQT4.8(C ++)を使用しており、次のような例外処理を記述しています。
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;
}
}
だから私の質問は、すべてのキャッチブロックにクリーンアップコードを書く必要がありますか?繰り返されるコードを書かないようにする方法はありますか?
注::[ method1()で]呼び出し元に発生した例外を再スローしたいので、タイプ情報が失われるため、単一のcatchブロックでそれらをキャッチできません。