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