ho alcuni oggetti sullo stack in funzione principale:Termina applicazione e chiamare i distruttori di oggetti locali
int main(...)
{
CFoo foo;
CBar bar;
}
Inoltre, ho una funzione, che tiene traccia di errori nella mia domanda:
void Err(std::string msg)
{
SomehowLogErrorMessage(msg);
exit(1);
}
La funzione di errore è sicuramente utile quando devo segnalare un errore irreversibile. Ho appena registrato l'errore e terminato l'applicazione - non può recuperare dopo tali errori. Tuttavia, terminare con "exit()" non invoca foo e bar destructors - un comportamento, che in realtà mi aspettavo (ma era sbagliato). "abort()" non aiuta neanche. Inoltre, Non posso usare le eccezioni per catturarle in main(). C'è un altro modo per implementare la funzione Err in modo tale che termina l'app e pulisce correttamente gli oggetti stack? O dovrei in qualche modo ridisegnare la mia gestione degli errori?
Grazie!
p.s. A proposito, non posso inviare il messaggio WM_QUIT alla mia finestra principale? Non sto bene con WinAPI, ma la mia app è pura Win32 e la mia funzione Err() può ottenere un handle per la mia finestra principale. Funzionerà?
Ovvio, domanda stupida, ma perché non è possibile utilizzare le eccezioni? – forsvarir
Se non puoi lanciare un'eccezione (perché no?) L'altra opzione è quella di restituire un codice di errore, e poi propagarlo fino alla fine del main. –
Diciamo, restrizioni specifiche della piattaforma. Il progetto è compilato con flag -fno-exceptions. – SadSido