При переполнении диска сервис падает с 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
- Деструктор выполняется в отдельном потоке
