c++ - una - variables estaticas c#
¿Llama C++ destructores para variables estáticas globales y de clase? (2)
Desde mi programa de ejemplo, parece que llama a los destructores en ambos casos. ¿En qué punto llama a los destructores para variables globales y estáticas de clase, ya que deberían asignarse en la sección de datos de la pila de programas?
Del § 3.6.3 del estándar C ++ 03:
Los destructores (12.4) para objetos inicializados de duración de almacenamiento estático (declarados en el alcance del bloque o en el ámbito del espacio de nombres) se invocan como resultado de regresar de la línea principal y como resultado de la llamada de salida (18.3). Estos objetos se destruyen en el orden inverso de la finalización de su constructor o de la finalización de su inicialización dinámica. Si un objeto se inicializa estáticamente, el objeto se destruye en el mismo orden que si el objeto se hubiera inicializado dinámicamente. Para un objeto de matriz o tipo de clase, todos los subobjetos de ese objeto se destruyen antes de que se destruya cualquier objeto local con duración de almacenamiento estático inicializada durante la construcción de los subobjetos.
Además, el § 9.4.2 7 establece:
Los miembros de datos estáticos se inicializan y se destruyen exactamente como los objetos no locales (3.6.2, 3.6.3).
Sin embargo, si un destructor no tiene un comportamiento observable, no puede ser invocado. Terry Mahaffey detalla esto en su respuesta a "¿Está garantizado que un destructor C ++ no será llamado hasta el final del bloque?" .
En algún lugar después de "principal"
(no puede conocer ni confiar en el orden exacto en el que se les llama)