Обработка брошенного объекта исключения таким стертым способом - это то, для чего существует std::exception_ptr
:
std::exception_ptr ex;
for (...) {
try {
// code that could throw
} catch (...) {
ex = std::current_exception();
}
}
if(ex) // Only evaluates to true if a thrown exception was assigned to it.
std::rethrow_exception(ex);
Все проблемы времени жизни, связанные с динамическим типом исключенияОбъект обрабатывается стандартной библиотекой.Вы можете думать о ex
как дескриптор подсчитанной ссылки к объекту исключения, позволяющий вывести его из блока try-catch.
Это соответствует подходу, который вы изложили в своем посте, а затем подтвердили вкомментарий, что последнее выброшенное исключение - это то, которое выдается повторно.