Когда abort () предпочтительнее, чем exit ()? - PullRequest
24 голосов
/ 09 сентября 2010

Я знаю разницу между двумя . Одна заметная вещь заключается в том, что abort () отправляет сигнал SIGABRT, поэтому это может быть актуально, когда ваше программное обеспечение полагается на них. Но для типичного приложения exit () представляется более безопасной версией abort () ...? Есть ли другие проблемы, связанные с использованием abort () вместо exit ()?

Ответы [ 4 ]

33 голосов
/ 09 сентября 2010

Использование abort приведет к дампу ядра, если для пользователя включены дампы ядра. Так что, как правило, я бы использовал abort, если вы настолько не уверены в том, что пошло не так, что единственный способ получить полезную информацию об этом - это проанализировать дамп ядра.

Если вы можете безопасно exit из любой заданной точки и не нуждаетесь в дампе ядра, тогда выход - более хороший подход.

20 голосов
/ 09 сентября 2010

Используйте abort(), если ваша программа находится в возможно поврежденном состоянии и вы считаете слишком опасным пытаться что-либо делать дальше. exit() вызовет любые функции atexit и деструкторы статических объектов в C ++. Обычно это то, что вам нужно для чистого выхода, но это может иметь катастрофические последствия, если, например, они перезаписывают файл с поврежденными данными.

8 голосов
/ 09 сентября 2010

Иногда ваша программа ломается до такой степени, что ее состояние становится несовместимым, и поэтому exit() не будет работать, потому что это приведет к уничтожению глобальных объектов, а последняя не будет работать должным образом, когда состояние несовместимо.В таких ситуациях предпочтительным является abort().

1 голос
/ 09 сентября 2010

Прерывание предпочтительнее, когда приложение не может обработать исключение и не может понять, что делать в сценарии. Exit () означает, что приложение должно завершить все задачи изящно. если возникает исключение, и приложение может обработать то же самое, тогда происходит вызов Exit ().

...