Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: <[(x)]> en 19 Mayo 2011, 06:17 am



Título: duda sobre operador new
Publicado por: <[(x)]> en 19 Mayo 2011, 06:17 am
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
  1. class coso
  2. {
  3.  
  4.  void funasd()
  5. {
  6.  
  7. tipo *untipo;
  8. untipo = new tipo;
  9.  
  10.        untipo.caminaunrato();
  11.  
  12.  }
  13. };
  14.  
  15.  

 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...
  


Título: Re: duda sobre operador new
Publicado por: willyhunting en 19 Mayo 2011, 10:22 am
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.