Modifiqué mi programa para que cuando ya haya memoria asignada, entonces se libere y ponga a "cad" en NULL, pero aún así no me está funcionando.
¿Qué estoy haciendo mal?
Código C++:
Ver original#include <iostream>
#include <new>
#include <cstring>
using std::cout;
class cadena
{
public:
cadena(const char *);
~cadena();
private:
void estableceCadena(const char *);
char * cad;
};
cadena::cadena(const char *LCad)
{
cad = NULL;
cout << "Constructor de: " << LCad << "\n";
estableceCadena(LCad);
}
cadena::~cadena()
{
cout << "Destructor de " << cad << "\n";
delete [] cad;
cad = NULL;
}
void cadena::estableceCadena(const char *Cad2)
{
if (cad != NULL) //si ya hay memoria asignada
{
delete [] cad; //borramos la cadena
cad = NULL; // y hacemos que no apunte a nada
}
cad
= new
char[strlen(Cad2
) + 1]; //reasignamos un espacio de memoria}
int main()
{
cadena Cad1("Hola");
Cad1 = "Adios";
return 0;
}
esta es la salida de mi programa
Código texto:
Ver originalConstructor de: Hola
Constructor de: Adios
Destructor de Adios
Destructor de ↑'=
<< El programa ha finalizado: codigo de salida: 0 >>
<< Presione enter para cerrar esta ventana >>