Выполняются ли деструкторы при вызове exit()?
Возможный дубликат:
Выйдет() или исключение, из-за которого не будет вызван деструктор конечной области видимости?
В С++, когда приложение вызывает exit (3), деструкторы в стеке должны быть запущены для разматывания стека?
Ответы
Ответ 1
Нет, большинство деструкторов не запускаются на exit()
.
С++ 98 §18.3/8 обсуждает это.
По существу, когда exit
называется статическим объектом, уничтожаются, обрабатываются обработчики atexit
, открываются потоки C и закрываются, а файлы, созданные с помощью tmpfile
, удаляются. Локальные автоматические объекты не уничтожаются. I.e., нет разматывания стека.
Вызов abort
позволяет еще меньше: нет очистки вообще.
Ответ 2
Если ваша ОС разумна (Unix, Linux или недавняя Windows), вызов exit() указывает ядру де-распределить всю память процессов. Стек не нужно разматывать; он просто перестанет существовать.