В эти дни я много читаю C ++ F.A.Q и особенно эту страницу .
Прочитав раздел, я обнаружил «технику», которую автор называет «диспетчер исключений», которая позволяет кому-то сгруппировать всю свою обработку исключений в одну удобную функцию:
void handleException()
{
try {
throw; // ?!
}
catch (MyException& e) {
//...code to handle MyException...
}
catch (YourException& e) {
//...code to handle YourException...
}
}
void f()
{
try {
//...something that might throw...
}
catch (...) {
handleException();
}
}
Что меня беспокоит, так это одно throw;
утверждение: если вы рассмотрите приведенный пример, то, конечно, очевидно, что он делает: он отбрасывает исключение, впервые обнаруженное в f()
, и обрабатывает его снова.
Но что, если я позвоню handleException()
самостоятельно, напрямую, не делая этого из предложения catch()
? Есть ли указанное поведение?
Кроме того, для бонусных баллов есть ли еще какое-то "странное" (возможно, не самое подходящее слово) использование throw
, о котором вы знаете?
Спасибо.