¿Por qué C ++ no usa std :: nested_exception para permitir el lanzamiento desde el destructor?
El principal problema al lanzar excepciones desde el destructor es que en el momento en que se llama al destructor, otra excepción puede estar "en vuelo" (std::uncaught_exception() == true
) y no es obvio qué hacer en ese caso. "Sobrescribir" la antigua excepción con la nueva sería una de las formas posibles de manejar esta situación. Pero se decidió questd::terminate
(u otrostd::terminate_handler
) debe llamarse en tales casos.
C ++ 11 introdujo la función de excepciones anidadas a través destd::nested_exception
clase. Esta característica podría usarse para resolver el problema descrito anteriormente. La antigua excepción (no detectada) podría simplemente anidarse en la nueva excepción (¿o viceversa?) Y luego podría lanzarse esa excepción anidada. Pero esta idea no fue utilizada.std::terminate
todavía se llama en tal situación en C ++ 11 y C ++ 14.
Entonces las preguntas. ¿Se consideró la idea con excepciones anidadas? ¿Hay algún problema con eso? ¿No se va a cambiar la situación en C ++ 17?