Si un destructor arroja C++ durante el desenrollado de la pila causado por una excepción, el programa finaliza. (Es por eso que los destructores nunca deben tirar en C++.) Ejemplo:Lanzar una nueva excepción al lanzar una excepción antigua
struct Foo
{
~Foo()
{
throw 2; // whoops, already throwing 1 at this point, let's terminate!
}
};
int main()
{
Foo foo;
throw 1;
}
terminate called after throwing an instance of 'int'
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Si se introduce un bloque finally en Java debido a una excepción en el bloque try correspondiente y que, finalmente, el bloque lanza una segunda excepción, la primera excepción es silenciosamente tragado. Ejemplo:
public static void foo() throws Exception
{
try
{
throw new Exception("first");
}
finally
{
throw new Exception("second");
}
}
public static void main(String[] args)
{
try
{
foo();
}
catch (Exception e)
{
System.out.println(e.getMessage()); // prints "second"
}
}
Esta pregunta pasó por mi mente: ¿Podría un lenguaje de programación manejar múltiples excepciones siendo lanzado al mismo tiempo? ¿Sería eso útil? ¿Alguna vez has perdido esa habilidad? ¿Hay un lenguaje que ya sea compatible con esto? ¿Hay alguna experiencia con este enfoque?
¿Alguna idea?
Acabas de hacer que mi cerebro arroje una excepción –
Interesante pregunta. Supongo que al "manejar una excepción" se refiere específicamente a "desenrollar la pila debido a una excepción", no a "ejecutar código desde un bloque catch". Esto último lo llamaría "manejo de una excepción", pero como se ha localizado un controlador, puede lanzar una excepción desde allí (al menos en C++). –
@Nick Tienes razón, edité el título.Si conoce uno mejor, siéntase libre de cambiarlo de nuevo ;-) – fredoverflow