hola viendo un codigo de por ahi me re sulto llamativo el hecho de que se hace esto:
(teniendo una clase definida : tipo)
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...
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.