Если нельзя бросать исключения, рассмотрите быстрый сбой
Причина
Если вы не можете хорошо справиться с восстановлением, по крайней мере вы можете выйти до того, как будет нанесён слишком большой сопутствующий ущерб.
Смотрите также: Симуляция RAII
Примечание
Если вы не можете систематически обрабатывать ошибки, рассмотрите «падение» как ответ на любую ошибку, которая не может быть обработана локально. То есть, если вы не можете восстановиться после ошибки в контексте функции, обнаружившей её, вызовите abort(), quick_exit() или аналогичную функцию, которая запустит перезапуск системы.
В системах с множеством процессов и/или множеством компьютеров всё равно нужно ожидать и обрабатывать фатальные сбои, скажем, из-за сбоев оборудования. В таких случаях «падение» — это просто передача обработки ошибок следующему уровню системы.
Пример
void f(int n)
{
// ...
p = static_cast<X*>(malloc(n * sizeof(X)));
if (!p) abort(); // прерываем при исчерпании памяти
// ...
}
Большинство программ всё равно не могут корректно обработать исчерпание памяти. Это примерно эквивалентно:
void f(int n)
{
// ...
p = new X[n]; // бросает при исчерпании памяти (по умолчанию terminate)
// ...
}
Обычно хорошей идеей является запись причины «падения» в лог перед выходом.
Контроль
Затруднено