Я использую 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;
}
}
Так что мой вопрос мне нужно написать очистки коды в каждом блоке поймать ? Есть ли способ я могу избежать написания повторного кода?
ПРИМЕЧАНИЕ :: [В method1()] Я хочу, чтобы повторно бросать исключения, которые произошли к моему caller.So я не могу поймать их в одном блоке поймать, потому что то типа информация будет потеряна ,
Попробуйте t o уменьшить количество кода очистки, необходимого с помощью интеллектуальных указателей, классов контейнеров и т. д. В идеале не должно быть никакого кода очистки. – user763305
Похоже, что вы хотите просто «try {/ * may throw * /} catch (specific_exception const & e) {/ * terminate * /}'. Если вас не интересуют типы исключений 'Exception1',' Exception2' и т. Д., То * не * ловите их. –
Кроме того, даже если вы поймаете по ссылке, вы должны * реконструировать, используя 'throw;' вместо 'throw e;', чтобы предотвратить нарезку. – ereOn