Вступить в клуб →
средняявопросООП, исключения и дизайн классов

При переполнении диска сервис падает с terminate called after throwing

class ReportFile {
public:
    ~ReportFile() {
        flush();   // бросает IoError, если диск полон
        ::close(fd_);
    }
};

Вызывающий код оборачивает работу с ReportFile в try/catch (const IoError&). Но при заполненном диске процесс аварийно завершается: terminate called after throwing an instance of 'IoError'. Почему catch не помог?

  • Деструктор неявно noexcept, выброс вызывает terminate
  • catch по ссылке не ловит исключения из деструктора
  • IoError нужно наследовать от std::exception
  • Деструктор выполняется в отдельном потоке

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела