In C++ throw;
quando eseguito all'interno di un blocco di cattura rilancia l'eccezione attualmente rilevata all'esterno del blocco.Cosa succede se un lancio; la dichiarazione viene eseguita al di fuori del blocco catch?
In this answer un'idea di eccezione dispatcher viene portata come una soluzione per ridurre la duplicazione del codice utilizzando la gestione delle eccezioni complesso spesso:
try {
CodeThatMightThrow();
} catch(...) {
ExceptionHandler();
}
void ExceptionHandler()
{
try {
throw;
} catch(FileException* e) {
//do handling with some complex logic
delete e;
} catch(GenericException* e) {
//do handling with other complex logic
delete e;
}
}
gettando un puntatore o un valore non fa alcuna differenza quindi è fuori della domanda.
Cosa succede se ExceptionHandler() non viene richiamato da un blocco catch?
ho provato questo codice con VC7:
int main(int, char**)
{
try {
throw;
} catch(...) {
MessageBox(0, "", "", 0);
}
return 0;
}
In primo luogo fa sì che il debugger per indicare un eccezione first-chance, poi subito un'eccezione non gestita. Se eseguo questo codice all'esterno del debugger, il programma si blocca nello stesso modo in cui è stato chiamato abort().
Qual è il comportamento previsto per tali situazioni?
Tag "windows" rimosso perché non ha nulla a che fare con Windows (ma È una buona domanda). –