Выполняются ли деструкторы при вызове exit()?

Возможный дубликат:
Выйдет() или исключение, из-за которого не будет вызван деструктор конечной области видимости?

В С++, когда приложение вызывает exit (3), деструкторы в стеке должны быть запущены для разматывания стека?

Ответы

Ответ 1

Нет, большинство деструкторов не запускаются на exit().

С++ 98 §18.3/8 обсуждает это.

По существу, когда exit называется статическим объектом, уничтожаются, обрабатываются обработчики atexit, открываются потоки C и закрываются, а файлы, созданные с помощью tmpfile, удаляются. Локальные автоматические объекты не уничтожаются. I.e., нет разматывания стека.

Вызов abort позволяет еще меньше: нет очистки вообще.

Ответ 2

Если ваша ОС разумна (Unix, Linux или недавняя Windows), вызов exit() указывает ядру де-распределить всю память процессов. Стек не нужно разматывать; он просто перестанет существовать.