<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Una última duda sobre el tema de la reserva dinámica de memoria.<BR>
 <BR>
¿y si el programa termina anormalmente (por ejemplo, porque se aborta llamando a la función "abort()" ó porque recibe una señal de aborto y no la maneja)? ¿se sigue ejecutando el código objeto que añade el compilador de C++ para destruir todos los objetos que se hayan creado y sigan vivos?<BR>
 <BR>
Por cierto, ¿conoces algún programa/herramienta para win32 que permita saber si un cierto proceso tiene "fugas de memoria" (memory leaks)?<BR>
 <BR>
Saludos.<BR>
<BR> <BR>> Date: Thu, 30 Jul 2009 16:46:40 -0400<BR>> From: srd4121@njit.edu<BR>> To: cconclase@listas.conclase.net<BR>> Subject: Re: [C con Clase] [C con clase] ¿exit() libera memoria dinámica?<BR>> <BR>> Hola David,<BR>> <BR>> David Inocente Romero Escalona wrote:<BR>> > En primer lugar, muchas gracias por tu completa respuesta, Steven.<BR>> > Creo que ya sé por qué he vuelto a esta lista de correo...<BR>> > <BR>> <BR>> De nada; para eso estamos :)<BR>> <BR>> > En mi aplicación, las reservas de memoria de forma dinámica se <BR>> > realizan en una sola clase C++ (que modeliza una lista de números<BR>> > reales dinámica, es decir, que puede crecer en tiempo de ejecución).<BR>> > Esta clase define adecuadamente su método destructor para que libere<BR>> > toda la memoria que haya podido reservar dinámicamente. Igualmente,<BR>> > todos los métodos de la clase tienen especial cuidado en no dejar<BR>> > zonas de memoria reservadas dinámicamente sin liberar.<BR>> > <BR>> > En ningún otro punto de la aplicación se realiza reserva dinámica de<BR>> > memoria alguna. Todos mis objetos 3D (que son objetos de clases C++)<BR>> > que necesitan usar una lista dinámica de números reales tienen un<BR>> > objeto miembro de la clase mencionada que maneja la memoria dinámica.<BR>> > <BR>> > Además, todos los objetos que creo los creo usando memoria estática<BR>> > (es decir, sin reservar memoria en tiempo de ejecución); de esta<BR>> > forma:<BR>> > <BR>> > Objeto3D objeto3D(<parámetros necesarios>);<BR>> > <BR>> > Por lo tanto, según lo último que comentas, no debo destruir objeto <BR>> > alguno (aunque ese objeto contenga un objeto que a su vez ha<BR>> > reservado memoria dinámicamente). Al terminar el proceso, se<BR>> > destruirán todos los objetos creados (por lo que se llamará a sus<BR>> > destructores y, éstos, acabarán liberando la memoria reservada en<BR>> > tiempo de ejecución).<BR>> > <BR>> > ¿estoy en lo correcto?<BR>> > <BR>> <BR>> Perfecto. Si los destructores gestionan la liberación de la memoria <BR>> dinámica, entonces el "exterior" no tiene que preocuparse. Al fin y al <BR>> cabo, se trata de una gestión interna del objeto, el cual debe hacer <BR>> autónomamente.<BR>> <BR>> > Por cierto, ¿quién envía el mensaje destructor a todos los objetos<BR>> > que se hayan creado al terminar el proceso? ¿el compilador de C++<BR>> > introduce código objeto que se encarga de realizarlo?<BR>> > <BR>> <BR>> Sí. El compilador es quien se encarga, ya que este sistema está <BR>> establecido por el lenguaje, C++.<BR>> <BR>> <BR>> Para zanjar este tema, se me olvidó comentar que existe la <BR>> clase-plantilla 'auto_ptr' que podría servir para lo que mencionas. Esta <BR>> plantilla representa el concepto de un "puntero inteligente". <BR>> Básicamente, se comporta como un puntero, pero generará una clase la <BR>> cual destruirá la memoria dicho puntero apunta, valga la redundancia. <BR>> Por ejemplo,<BR>> <BR>> int main()<BR>> {<BR>> auto_ptr< Info > pLista( new Info );<BR>> ...<BR>> return 0;<BR>> }<BR>> <BR>> La clase 'auto_ptr<Info>' se encargará de destruir la memoria creada <BR>> dinámicamente al terminar el ámbito.<BR>> <BR>> Sé que no necesitas esto, pero quería completa lo que dije en mi <BR>> anterior mensaje.<BR>> <BR>> <BR>> Espero haber aclarado las dudas.<BR>> <BR>> Steven<BR>> <BR>> <BR>> _______________________________________________<BR>> Lista de correo Cconclase Cconclase@listas.conclase.net<BR>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<BR>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ<BR><br /><hr />Comparte tus fotos con tus amigos. Más fácil con <a href='http://download.live.com' target='_new'>Windows Live</a></body>
</html>