Ich verstehe, dass wenn etwas throw
n ist, der Stapel bis zu dem Punkt 'abgewickelt' wird, an dem es abgefangen wird, und die Destruktoren von Klasseninstanzen auf dem Stapel in jedem Funktionskontext ausgeführt werden (weshalb Sie keine Ausnahme von einem Destruktor auslösen sollten - Sie könnten am Ende einen zweiten werfen) ... aber ich frage mich, wo im Speicher das Objekt gespeichert ist, das ich geworfen habe, während dies geschieht?
Ist es implementierungsabhängig? Wenn ja, gibt es eine bestimmte Methode, die von den meisten gängigen Compilern verwendet wird?
raise
zerstören Sie es, sobald Sie mit dem Abwickeln fertig sind (einschließlich der Möglichkeit, Fangklauseln die Möglichkeit zu geben, die Ausnahme durch Bezugnahme zu behandeln und sie erneut zu behandeln). Das Problem bei der Heap-Zuweisung ist, was tun Sie, wenn Ihr Versuch, die Ausnahme zuzuweisen, fehlschlägt? Sie müssten abbrechen (genau wie beim Stapelüberlauf, wenn das Ablegen auf dem Stapel aufgrund von Platzmangel "fehlschlägt"). Im Gegensatz zu Java darf die Implementierung stattdessen keine andere Ausnahme auslösen.