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.