Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Mis preguntas sobre C++

Iniciado por tewe76, 08 de Febrero de 2009, 03:34:22 PM

« anterior - próximo »

tewe76

Porque quiero crear una función FinalizarEngine() que se encargue de descargar todo, cerrar archivos, etc, y salir al SO.
Tewe
www.TAPAZAPA.com : Funny and easy to play games for all ages! - Fairy Match - Brain Crash
www.LaRebelionDelBiberon.com : Experiencias de unos padres primerizos

davur

Cita de: tewe76 en 01 de Marzo de 2009, 01:18:44 PM
Porque quiero crear una función FinalizarEngine() que se encargue de descargar todo, cerrar archivos, etc, y salir al SO.


#include "engine.h"

int main()
{
    try
    {
        Engine engine(...);
        engine.Run();
    }
    catch (const EngineException& e)
    {
        //...
    }
} // --> en este punto, ya se ha llamado a Engine::~Engine()


Utiliza los constructores y destructores para reservar y liberar recursos, es la manera idiomática en C++. Ni llamar a std::exit() ni tener una función global que necesitas invocar explícitamente son buenas ideas para lo que quieres hacer.

tewe76

No entiendo bien tu ejemplo ??? :

#include "engine.h"

int main()
{
    try
    {
        Engine engine(...);
        engine.Run();
    }
    catch (const EngineException& e)
    {
        //... ¿aquí qué se supone que va?
    }
//¿Aquí ya se ha llamado a Engine::~Engine()? Sólo suponiendo que la condición para salir del gameloop sea la no existencia de engine, ¿no?
} // -> en este punto, ya se ha llamado a Engine::~Engine()
Tewe
www.TAPAZAPA.com : Funny and easy to play games for all ages! - Fairy Match - Brain Crash
www.LaRebelionDelBiberon.com : Experiencias de unos padres primerizos

davur

Es un ejemplo que no pretende sentar cátedra. La clase Engine inicializa lo que necesita en el constructor, y lanza una excepción en caso de error. Excepción que tratas en main() de la manera que consideras oportuna. Luego se ejecuta el bucle principal de la manera que consideras oportuna, y que acaba cuando consideras oportuno.

Lo importante aquí es que el destructor de Engine, que presumiblemente liberará toda una serie de recursos, se llama automáticamente cuando sales del ámbito de la variable local engine sin ningún esfuerzo adicional por tu parte.

tewe76

Ah, vale, ahora ya te he entendido mejor :)
Tewe
www.TAPAZAPA.com : Funny and easy to play games for all ages! - Fairy Match - Brain Crash
www.LaRebelionDelBiberon.com : Experiencias de unos padres primerizos

shephiroth

#50
Buenas. Yo lo que he hecho es en mi clase de video (la q crea la ventana y maneja el bucle de control del juego) crearme una funcion con un acceso estatico (por lo q es accesible desde cualquier punto del proyecto/programa) que se encargue de dar fin al bucle de control. Seria algo como:

Video::run() {
...inicializacion de recursos, librerias, etc...
while (!finPrograma) {
Video::Logica();
Video::Dibujado();
}
...finalizacion de recursos, librerias, etc...
}

static Video::finalizarPrograma() {
finPrograma=true;
}






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.