В настоящее время я следую основным правилам C ++, установив для всех деструкторов в моем коде значение noexcept
.Некоторые из моих деструкторов могут потенциально генерировать исключения - в этом случае я бы хотел, чтобы программа аварийно завершилась, и предоставил мне подробную информацию о том, что вызвало сбой.Установка спецификатора noexcept
в деструкторе вызовет std::terminate()
, что в свою очередь вызовет значение по умолчанию terminate_handler
.Значение по умолчанию terminate_handler
напечатает исключение, которое было запущено внутри деструктора.Это замечательно в том случае, если метательный деструктор не был вызван во время создания другого исключения.В этом случае я бы хотел, чтобы terminate_handler
напечатал оба исключения, чтобы я мог знать, что спровоцировало путь обработки ошибок.
Проблема в том, что я не могу найти путь в стандартебиблиотека, чтобы получить необработанное исключение.Есть функция std::current_exception()
, которая получает обрабатываемое исключение, и std::uncaught_exceptions()
, который получает только число необработанных исключений.Я хотел бы получить std::exception_ptr
или что-то еще, кроме необъяснимых исключений.Это возможно?