Рассмотрим следующий код:
try
{
throw _1();
}
catch (...)
{
try
{
throw _2();
}
catch (...)
{
throw _3();
}
throw;
}
Я хочу понять следующее:
1) Что именно происходит, когда случается throw _2;
? Активное исключение (_1
) заменяется другим (_2
)?
2) Какое именно исключение будет проброшено дальше при вызове throw;
?
3) Если throw _3;
не будет, то будет ли что-нибудь проброшено дальше?
throw _3
случается и вызываетсяstd::terminate
.std::terminate()
вызывается в том случае, если ловить исключение больше некому, а, допустим, это не так.try-catch
- тогда есть кому ловить.throw _3
случается и ловится. До пустогоthrow
исполнение не доходит.