destruktor + exceptions
-
hi leute!
ich hatte grad ein probl. hab eine exception mit throw aus einem destruktor werfen wollen...dank volkard hab ich mal gemerkt das das nicht so sinnvoll ist...
<volkard> du hast gerade ein grundlegendes und noch ungelöstes problem von c++ entdeckt. glückwunsch.
naja...wie könnte man das problem denn lösen??
wenn ich ein objekt am heap anlege dann könnte ich ja den delete operator überladen...das müsste glaube ich gehn...nur was ist wenn das onjekt am stack sein muss?cu
-
Na, dass man im Destruktor tunlichst keine Exceptions werfen sollte ist allgemein bekannt..
Welches Problem willst Du denn ueberhaupt loesen?
-
try { // deine gefährlichen sachen } catch(DeineException& exception) { // ignorieren, assert oder irgendwie loggen. }
-
cplusplus schrieb:
wenn ich ein objekt am heap anlege dann könnte ich ja den delete operator überladen...
Würde gehen, nutzt aber nichts. operator new/delete sind nur für die Speicherverwaltung zuständig. Von der Objekterstellung und -zerstörung bekommen die nichts mit.
Eine Lösung wäre, alle Exceptions vor Verlassen des Destruktors zu "schlucken". Man kann sich auch auf die paar wenigen Spezialfälle beschränken, wo man das gefahrlos Exceptions im Destruktor werfen kann (da muss man aber schon sehr genau hinschauen). Oder man denkt sich gleich etwas aus, wo man erst gar nicht eine Exception im Destruktor generieren muss.