Ver Mensaje Individual
  #5 (permalink)  
Antiguo 31/05/2014, 12:20
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Mi cadena se pierde

a ver me parece que no estas entendiendo...

sabes como trabaja los constructores y destructores?
Te lo explico por si las moscas.
el constructor llamas al crear la funcion

Pero los destructores se llaman automáticamente cuando main finaliza.
o sea que solo liberas la variable en memoria cuando termina main
entonces mira eso:

si hago tipo * variable = new tipo

que es lo que estoy haciendo?

1º estas creando un puntero tipo * variable
despues le estas asignando un entero en el heap variable = new tipo

con que pongas NULL no estas liberando memoria.... es mas ahora mismo es cuando ya no la puedes liberar por que la perdiste.

solo liberas memoria llamando a delete.

para poder usar el puntero pprimero llamas delet variable y después variable = NULL;

sino realmente lo has empeorado mas aun XD

crear:
int * p = new int;

borrar:
delet p;

p = NULL;

ahora ya puedes hacer otra vez

p = new int;

Y otra cosa es que esta claro que si llamas al constructor 2 veces

cadena::~cadena()
{
cout << "Destructor de " << cad << "\n";
delete [] cad;
}

cadena::~cadena()
{
cout << "Destructor de " << cad << "\n";
delete [] cad;
}

que va pasar?

como se trata de la misma variable la primera ves va imprimir cout << "Destructor de " << cad << "\n"; y lo va destruir delete [] cad;

luego llamas una vez mas y cuando imprimes cout << "Destructor de " << cad << "\n";
la variable ya esta destruida por que se trata de la misma variable.

mejor usas funciones para cambiar el valor a cad por segunda vez por que no le veo necesidad de que llamas al constructor 2 veces.

ya llamas una vez cuando crea pues haz una función que cambia eso y que antes de cambiar llama al delet[] cad para liberar ;)

A ver si llegamos a afinar ;)