C/Visual C - Duda: invocación de destructores en c++

   
Vista:

Duda: invocación de destructores en c++

Publicado por sxp (4 intervenciones) el 19/11/2008 19:13:31
Hola: leyendo el capítulo 6, sección 6.13 "Invocación de constructores y destructores" del libro
Cómo programar en C++ cuarta edición, de Deitel & Deitel, veo que:

"...Los constructores son llamados para objetos definidos con alcance global, antes de que cualquier
otra función (incluyendo a main) en ese archivo comience su ejecución (aunque el orden de la ejecución de constructores de objetos globales entre archivos no está garantizada) Los destructores correspondientes son llamados cuando main termina o cuando se llama a la función exit
Los destructores no son llamados para objetos globales, si el programa termina con una llamada a una función exit o a una abort..."

Y creo no logro interpretarlo correctamente.
No he estudiado aún las funciones exit y abort, pero lo estoy entendiendo (seguramente de manera erronea) como que hubiera una contradicción entre "los destructores correspondientes son llamados cuando main termina o cuando se llama a la función exit" y "los destructores no son llamados para objetos globales, si el programa termina con una llamada a una función exit o a una abort"
Y esta es mi duda. ¿O es que si la función exit se llama supongamos, en medio de un programa, se llama y si está al final de main no se llama?
Lo otro que me gustaría que me explicaran de otra forma que me sea más sencilla de entender es lo de los segundos paréntesis. ("aunque el orden..." "...está garantizada")
Bueno gracias de antemano y saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Duda: invocación de destructores en c++

Publicado por Tom (481 intervenciones) el 20/11/2008 14:32:47
Puesssssss ... es un lío :-)
Los destructores en C++ son llamados de forma automática cuando los objetos salen de ámbito. Esto ocurre normalmante cuando finaliza con } (sí, la llave) el bloque de código en el que han sido definidos.

Más o menos, entonces, si la tarea main() finaliza con } no sólo se invocarán los destructores de objetos locales, sino que continuará ejecutándose código (que tú no has escrito, pero es incluído por el compilador) que invocará los destructores globales.

Parece ser que, cuando usas exit() estos destructores globales no se invocarán.

De todos modos, quizás estés leyendo una mala traducción del libro ... ¿está en la red para echarle un ojo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda: invocación de destructores en c++

Publicado por sxp (4 intervenciones) el 20/11/2008 20:32:21
Si, la segunda edición está:
http://rapidshare.com/files/90816199/DeitelC.rar
En la página 617 del libro.
Pero, aunque es parecido, no es igual a lo que dice en la cuarta.
No menciona las funciones exit ni abort, que es parte importante de mi pregunta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar