exit()
отлично подходит для небольших программ.Для более крупных программ есть несколько проблем.Во-первых, не все ошибки должны завершать программу - часто она может восстановиться.
Вторая проблема: даже если вы хотите завершить работу, сложно написать одну функцию clean_up()
, которая бы заботилась обо всех ресурсах, выделенных в различных частях программы.Это то, что RAII в C ++ для.exit()
несовместимо с RAII, так как не вызывает деструкторы, кроме глобальных или статических объектов.
Третья проблема: в точке обнаружения ошибок вы часто не можете создать сообщение об ошибке, значимое для конечного пользователя, но возможно создать такое сообщение об ошибке при обнаружении исключения.
Обычно дилемма иная: альтернативой исключениям является использование кодов возврата для указания ошибок.Существует множество компромиссов между исключениями и кодами возврата, и этой теме посвящены сотни статей.Он слишком велик для анализа в этом ответе.