Warum verwendet C ++ nicht std :: nested_exception, um das Werfen vom Destruktor zu ermöglichen?

Das Hauptproblem beim Auslösen von Ausnahmen vom Destruktor besteht darin, dass in dem Moment, in dem der Destruktor aufgerufen wird, eine andere Ausnahme "im Flug" sein kann std::uncaught_exception() == true) und so ist es nicht offensichtlich, was in diesem Fall zu tun ist. Das "Überschreiben" der alten Ausnahme mit der neuen wäre eine der möglichen Möglichkeiten, um mit dieser Situation umzugehen. Aber es wurde entschieden, dassstd::terminate (oder ein anderesstd::terminate_handler) muss in solchen Fällen aufgerufen werden.

C ++ 11 führte die Funktion für verschachtelte Ausnahmen über @ eistd::nested_exception Klasse. Dieses Merkmal könnte verwendet werden, um das oben beschriebene Problem zu lösen. Die alte (nicht abgefangene) Ausnahme könnte einfach in die neue Ausnahme verschachtelt werden (oder umgekehrt?), Und dann könnte diese verschachtelte Ausnahme ausgelöst werden. Aber diese Idee wurde nicht verwendet.std::terminate wird in einer solchen Situation immer noch in C ++ 11 und C ++ 14 aufgerufen.

So die Fragen. Wurde die Idee mit verschachtelten Ausnahmen berücksichtigt? Gibt es irgendwelche Probleme damit? Wird sich die Situation in C ++ 17 nicht ändern?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage