En C++ throw;
cuando se ejecuta dentro de un bloque catch vuelve a lanzar la excepción actualmente capturada fuera del bloque.¿Qué sucede si un tiro? declaración se ejecuta fuera del bloque de captura?
En this answer una idea del despachador excepción se crió como una solución para reducir la duplicación de código cuando se utiliza el control de excepciones complejo menudo:
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;
}
}
Lanzar un puntero o un valor no hace ninguna diferencia lo que está fuera de la pregunta.
¿Qué ocurre si se llama a ExceptionHandler() no desde un bloque catch?
yo probamos este código con VC7:
int main(int, char**)
{
try {
throw;
} catch(...) {
MessageBox(0, "", "", 0);
}
return 0;
}
En primer lugar, hace que el depurador para indicar una excepción de primera oportunidad, entonces inmediatamente una excepción no controlada. Si ejecuto este código fuera del depurador, el programa se bloquea de la misma manera que si se llama a abort().
¿Cuál es el comportamiento esperado para tales situaciones?
Se eliminó la etiqueta "windows" porque esto no tiene nada que ver con Windows (pero ES una buena pregunta). –