abort отправляет сигнал SIGABRT, exit просто закрывает приложение, выполняющее обычную очистку.
Вы можете обработать сигнал abort так, как хотите, но по умолчанию вы также закрываете приложение с кодом ошибки.
abort не будет выполнять уничтожение объектов ваших статических и глобальных членов, но exit будет.
Конечно, хотя, когда приложение полностью закрыто, операционная система освобождает любую свободную память и другие ресурсы.
В abort и exit завершение программы (при условии, что вы не изменили поведение по умолчанию), код возврата будет возвращен родительскому процессу, который запустил ваше приложение.
См. Следующий пример:
SomeClassType someobject;
void myProgramIsTerminating1(void)
{
cout<<"exit function 1"<<endl;
}
void myProgramIsTerminating2(void)
{
cout<<"exit function 2"<<endl;
}
int main(int argc, char**argv)
{
atexit (myProgramIsTerminating1);
atexit (myProgramIsTerminating2);
//abort();
return 0;
}
Комментарии:
Если abort не закомментировано: ничего не печатается и деструктор некоторого объекта не вызывается.
Если прокомментировать abort , как указано выше: будет вызван деструктор someobject, вы получите следующий вывод:
функция выхода 2
функция выхода 1