Exceptions
-
Tach leute
Ich lese in meinem Buch gerade das hier:
"Wenn aus einem Block herausgesprungen wird, werden die Destruktoren aller in diesem Block definierten automatischen Objekte aufgerufen! Diese Objekte werden dabei vom Laufzeit-Stack entfernt"
Angenommen ich hätte eine Klasse:
class XYZ { public: ~Destructor() DoSomething() throw(Exception) ; };Und wenn in DoSomething eine Exception ausgeworfen wird, wird der Destructor von dieser Klasse aufgerufen?
Dann habe ich noch gelesen, dass 'throw' deprecated wäre. Was soll man stattdessen benutzen?
Danke!
-
Ludwig83 schrieb:
Und wenn in DoSomething eine Exception ausgeworfen wird, wird der Destructor von dieser Klasse aufgerufen?
Nein, der Satz aus deinem Buch sagt was anderes. Es werden nur die Objekte zerstört, die in dem lokalen Block des
throw-Statements und in den umliegenden Blöcken/Funktionen liegen, bis die Exception gefangen wird.void Function() { XYZ xyz; { XYZ abc; xyz.DoSomething(); // wirft Exception } // hier wird abc, aber nicht xyz zerstört } // hier wird xyz zerstörtLudwig83 schrieb:
Dann habe ich noch gelesen, dass 'throw' deprecated wäre. Was soll man stattdessen benutzen?
throwist nicht deprecated. Was in C++0x, dem neuen Standard, deprecated sein wird, sind Exception-Spezifikationen. Stattdessen sollst du gar nichts oder evtl. späternoexceptverwenden. Siehe auch hier.