duda sobre operador new

Iniciado por <[(x)]>, 19 Mayo 2011, 06:17 AM

0 Miembros y 1 Visitante están viendo este tema.

<[(x)]>

hola viendo un codigo de por ahi me re sulto llamativo el hecho de que se hace esto:

(teniendo una clase definida : tipo)
Código (cpp) [Seleccionar]

class coso
{

 void funasd()
{

tipo *untipo;
untipo = new tipo;

       untipo.caminaunrato();

 }
};



Bien practicamente es eso, el tema es que 'funasd()' es llamada mas de una ves. Y lo segundo es que la funcion untipo.caminaunrato() tira desp de 10 seg un mensaje en pantalla el cual avisa q el tipo deja de caminar.

Lo q me llama la atencion es que al llamar varias veces a 'funasd()'
los otros 'tipos que caminan' no se terminan/borran, siguen funcionando y tiran el mensaje tranquilamente.

Esto es porque al ser un puntero y usar el operador new no rescribe la memoria ya usada y crea un objeto nuevo en otro espacio?

En este caso q pasa con esa memoria que fue declarada y se perdio al asignar una nuava direccion al puntero 'untipo'?

Espero haberme explicado bien...
 
<[(x)]>

willyhunting

En efecto, al reservar memoria dinámicamente utilizando el operador new, ésta no es liberada automáticamente al salir del ámbito de la función.; por lo que al no liberarse explícitamente (usando delete), cada vez que se llema a la función, se reserva más memoria, y tienes como resultado una bonita fuga de memoria que puede hacer que tu ordenador pete o vaya a pedales.