Que tul ...
Estaba decorando mi motor 2d y pase todo el manejo de errores a exception handling, hice dos o tres pruebas y como vi que andaba lo supuse correcto, pero pasado los dias al saltar una exepción me tiro un error, el problema es que se perdió el contenido del objeto de la exepción. No lo pude resolver en el momento, y tampoco encontré info que me dijera el por que ...
Tengo entonces:
class TError {
char *t;
public:
TError(const char *f, ...)
{
static char temp[1024];
// formateo con va_star y va_list y ese rollo
// para que en temp me quede la cadena formateado
t=new char[strlen(temp)+1];
strcpy(t, temp);
// si debugueo aqui tengo en t lo que tengo que tener!!!
}
~TError() { if(t) delete t;}
const char *Tomar_Texto(void) { return t; }
};
try {
throw TError("%d",10);
} catch(TError &e) {
// pero al cortar la ejecución aquí veo que e.t apunta a la misma dirección de memoria, pero
// el contenido es basura ...
Sistem->ShowSistemMessage(e.Tomar_Texto());
}
No se que estoy haciendo mal ...
Si alguien me ayuda.
Saludos.
Agrego: ¿esta bien tomar el error por referencia? o sea capturarlo con TError &e? o deberia tirar el error con new y agarrarlo con TError *e?
Saludos.
EDIT: Replace "Sistem" for "System", en realidad a todo el motor lo pase a castellano hace poco también.
Creo que el destructor es llamado antes de ver el mensaje, por eso pierdes los datos, quizás t debería ser estático.
Un saludo.
Si, ese es el problema, me destruye el objeto.
Estuve leyendo y llegué a que cuando se lanza una excepción por objeto este se copia con la función copia (la cual no se cual es) y luego el original se destruye. La solución: lo paso por new.
De todos modos me queda la duda.
Saludos