В эти дни я много читал FAQ по C ++ и особенно эта страница .
Прочитав этот раздел, я обнаружил «технику», которую автор называет «диспетчером исключений», которая позволяет кому-то сгруппировать всю свою обработку исключений в одной удобной функции:
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
, о котором вы знаете?
Спасибо.