31/05/2014, 12:20
|
| | | Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes 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 ;) |