c++ destructor exit

c++ - ¿Se ejecutan los destructores al llamar a exit()?



(2)

Posible duplicado:
¿Exigirá exit () o una excepción para evitar que se llame a un destructor de fin de alcance?

En C ++, cuando la aplicación llama a exit (3), ¿se supone que los destructores en la pila deben ejecutarse para desenrollar la pila?


Si su sistema operativo es razonable (Unix, Linux o Windows reciente), llamar a exit () le dice al núcleo que desasigne la memoria de todos los procesos. La pila no necesita ser desenrollada; simplemente dejará de existir.


No, la mayoría de los destructores no se ejecutan en exit() .

C ++ 98 §18.3 / 8 discute esto.

Esencialmente, cuando se llama exit los objetos estáticos se destruyen, los controladores atexit se ejecutan, las secuencias abiertas de C se vacían y se cierran, y los archivos creados por tmpfile se eliminan. Los objetos locales automáticos no son destruidos. Es decir, no hay pila de desenrollar.

Llamar a abort permite que ocurran incluso menos: no hay limpieza alguna.