Назад к вопросам
JuniorТеорияЧасто
Что произойдёт при запуске этой программы?
#include <iostream>
#include <stdexcept>
struct Logger {
~Logger() { throw std::runtime_error("flush failed"); }
};
int main() {
try { Logger log; }
catch (const std::exception&) { std::cout << "caught"; }
}Программа вызовет std::terminate: деструктор — noexcept
- Ждать
caught: деструктор по умолчаниюnoexcept, поэтому исключение, покидающее его, вызываетstd::terminate, и обработчик не выполнится. - Ждать ошибку компиляции:
throwв деструкторе собирается, а GCC и Clang только предупреждают о нём.
- Как
Loggerможет сообщить о неудачной записи, не бросая исключение из деструктора? - Что изменится, если деструктор поймает своё исключение в блоке
try?