[C con Clase] Ahora el destructor
rodolfo rosso paz
rodolforossopaz en hotmail.com
Mar Jun 19 06:08:57 CEST 2007
Hola, saludos a todos.
Gracias como siempre a Steven por la aclaración respecto a mi pregunta sobre
el constructor de copia. Si, lo que trataba de hacer era una copia profunda,
pero no estaba muy seguro de como, ahora si, thanks.
Ahora tengo una duda respecto a los destructores; Tengo una funcion miembro
que
sobrecarga el operando + para sumar 2 objetos Cadena (tipo creado en el
programa)
la función es la siguiente, y funciona, asi que se la pueden saltar, por ahi
no va mi pregunta:
// concatena this con el operando derecho y devuelve
// una Cadena para que pueda ser asignada a otro objeto Cadena o ser
impresa
const Cadena Cadena::operator+( const Cadena &derecha )
{
size_t sumaLongitud = longitud + derecha.longitud; // suma de
longitudes
char *pTemp = new char[ sumaLongitud + 1 ]; // reserva memoria
strcpy( pTemp, ptrC ); // copia ptrC (la cadena tipo
C de this)
strcpy( pTemp + longitud, derecha.ptrC ); // copia derecha.ptrC (cadena
tipo C de derecha)
Cadena cadenaTemp(ptrTemp); // crea un objeto cadena temporal invocando
al constructor de
// conversion
delete[] pTemp; // reclama el espacio
return cadenaTemp; // permite las llamadas en cascada
} // fin de la función operator+
Ademas, tengo un constructor de conversión que convierte las cadenas de tipo
C en cadenas
de tipo Cadena, y un destructor, ambas funciones miembro me pintan en
pantalla cuando son
invocadas por el compilador: la cadena que estan convirtiendo o destruyendo
y la direccion de
esa cadena para saber quien destruye a quien.
en la funcion main(), tengo las siguientes lineas:
// verifica el operador sobrecargado +
// c1 = mortisaranga, c2 = matachilanga
cout << "c1 + c2 arroja = " << c1 + c2 << "\n";
Resultado de la corrida:
Constructor de Conversion: 0x77fda0 - mortisaranga matachilanga
c1 + c2 arroja = mortisaranga matachilanga
Destructor: 0x77fda0 - mortisaranga matachilanga
Hasta aqui todo perfecto, el destructor hace lo esperado destruyendo la
cadena
temporal, pero...
Cuando reemplazo en el main() las lineas antes mencionadas por estas otras:
// verifica el operador sobrecargado +
// c1 = mortisaranga, c2 = matachilanga
Cadena c33 = c1 + c2;
cout << "c33 arroja = " << c33 << "\n";
La corrida resulta:
Constructor de Conversion: 0x77fda0 - mortisaranga matachilanga
c33 arroja = mortisaranga matachilanga
Pregunta: ¿a donde se fue el destructor?, si se supone que la cadena
temporal en donde se almacenaba c1 + c2 ya hizo su trabajo cuando le
fue asignada a c33, ¿porque esa cadena temporal no se destruye?,
como si sucedio en el caso anterior, luego de que la cadena temporal
fue impresa en pantalla.
Bueno, espero no caer pesado con tanto detalle.
Como siempre, que Dios los bendiga y gracias de antemano
Rodolfo
_________________________________________________________________
Consigue aquí las mejores y mas recientes ofertas de trabajo en América
Latina y USA: http://latam.msn.com/empleos/
Más información sobre la lista de distribución Cconclase