Problemilla con C++

elkaoD

¿Y hay alguna forma de que un objeto se destruya a sí mismo por ejempo si no se logra encontrar un archivo en el constructor?

r2d2rigo

Pues si, llamando al destructor explicitamente:

if (!file.is_open())
{
    this->~CObjeto();
    return;
}

Aunque no suele ser recomendable hacerlo de esta manera.

elkaoD

¿Y qué sería recomendable?

GaN2

Lo recomedable no sería que el mismo compilador llamara al destructor una vez finalizado el programa?

Por cierto, mil gracias por los consejos, ya funciona, de hecho lo hice de la siguiente manera:


unsigned int  numero = movimientos.tablero[i][j];
			stringstream numeroString;
			numeroString << numero;
			char str[222];
			sprintf(str, "%d", numero);
			pDC->DrawText(str, &rcCelda, 1);

Y todo perfecto, pinta los numeritos y demas xD

r2d2rigo

#33, que un objeto llame a su propio destructor es una de las cosas que nunca se deben hacer (como los gotos, pero luego nadie lo respeta). Tienes dos soluciones:

  • Desde el mismo ambito que creas el objeto, compruebas si se ha creado correctamente y si no llamas al destructor.
  • Creas una funcion parecida al destructor, que ponga todas las variables miembro a valores no inicializados, y luego se destruira solo al salir de ambito

#34, espero que ese no sea el cacho final de codigo, porque numeroString no lo estas usando para nada :P

GaN2

Joder, gracias Rodrigo, no me habia dado cuenta xDDD El numeroString ese era parte de mis experimientos maquiavelicos centrados en manejar el metodo drawText xD

cabron

#33
La mejor forma de terminar un objeto en el constructor, es lanzar una excepción.

En ese caso todo el objeto se fulmina, de hecho ni siquiera hace falta destructor, ya que el objeto no se termina de construir, y el destructor no se invoca si lanzas una excepción desde el constructor. Ej:

class a
{
   public:
    a()
    {
            if(lo que sea)
                throw "Ha petao";
     }
}