Выбор ответа Middle Исключения спрашивают часто обновлено
Исключение из деструктора
Вопрос
Деструктор локального объекта бросает исключение, пока раскручивается стек из-за другого исключения. Что произойдёт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: std::terminate: два активных исключения одновременно невозможны. Даже без раскрутки деструктор по умолчанию noexcept, и исключение из него вызовет std::terminate.
Варианты ответа
std::terminate: два активных исключения одновременно невозможныправильный ответ- Второе исключение заменит первое и полетит к ближайшему
catch - Оба исключения поймает ближайший
catchи обработает по очереди - Исключение из деструктора будет проигнорировано, раскрутка продолжится
Разбор
Даже без раскрутки деструктор по умолчанию noexcept, и исключение из него вызовет std::terminate. А при раскрутке C++ в принципе не умеет обрабатывать второе исключение, поэтому тоже terminate. Отсюда правило: деструкторы не бросают; ошибки освобождения логируют или отдают через отдельный метод вроде close().
- Замены и объединения исключений в C++ нет.
- Игнорирования тоже.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.