Exceptions verhindern
-
nischt
-
An deiner Stelle würde ich erstmal Exceptions verstehen und dann willst du sie gar nicht mehr verhindern.
-
Optimizer schrieb:
An deiner Stelle würde ich erstmal Exceptions verstehen und dann willst du sie gar nicht mehr verhindern.
Weis net ob ich sie verstanden habe, aber ich will nicht, dass welche geworfen werden, weil mein Programm danach nicht mehr funktionieren würde und ich ein riesiges Speicherleck hätte :p
mfg
Glamdring
-
Fang sie doch einfach auf, behandele sie, und lösche halt bei Notwendigkeit dein dynamisch allokiertes Zeug?
-
Wenn das ganze Programm aber nach einer Exeption nicht wieder in einen lauffähigen Zustand kommen kann, dann kann ich machen was ich will, es geht nicht
mfg
Glamdring
-
Exceptions bedeuten aber auch, dass das Programm sich nicht in einem lauffähigen Zustand befindet, und dass jetzt ein Handler die Situation aufklären muss. Würde die Exception nicht geworfen, dann wär das Programm hilflos in einem undefinierten oder zumindest unerwünschten Zustand.
-
Sourceleaks kannst Du Dir aber auch mit objekten autopointern vectoren etc. sparen. Versuch dafür zu sorgen das die emfpindlichen Resourcen in einem Objekt stehen das zerstört wird wenn es ungültig wird.
An stellen an den das nicht geht wird Dir ein
try{
}
catch(...)
{}
nicht erspart bleiben.
-
Und ohne Exception hättest du doch auch ein Problem. Wenn das Programm danach nicht
mehr weitermachen kann, dann muss der Catch Block es halt beenden und davor
die ressourcen freigeben.
-
Ok, dann muss ich halt damit leben, schade
mfg und thx
-
hier liegt definitiv ein fehlverstehen von Exceptions vor. Natürlich kannst du auch ohne Probleme ein Programm `retten', in dem eine Exception geworfen wurde. Dafür gibt es ja catch!
http://tutorial.schornboeck.net/exceptions.htm
(...
http://www.gotw.ca/gotw/056.htm
http://www.gotw.ca/gotw/059.htm
http://www.gotw.ca/gotw/060.htm
...)
-
Exceptions sind ja nicht dafür da, um dein Programm zu killen, sondern, um dich zu zwingen, dass du den Fehler behandelst. Das ist ja das schöne dran.
-
Wenn do immer noch auf exceptions verzichten willst dann füg einfach folgende Preprocessorcode ein:
#define throw(A) #define try if(true) #define catch(A) if(false)
-
und was passiert bei
throw "autsch"; ??
-
Was soll das genze eigentlich? Beispielsweise kann new immernoch ein std::bad_alloc werfen, ...
Exceptions sind doch nichts böses.
#define throw(A)
Bringt gar nichts. Normalerweise Sieht es doch in etwa so aus:
throw Foo("Blabla");
-
außerdem bringt das ja nur etwas bei inline-Code!
-
Außerdem ist das kompletter Schwachsinn.
void safe(int parm) { if (is_dangerous(parm)) throw Dangerous(); do_potentially_dangerous_operation(parm); }
Man will nicht, dass das throw nicht ausgeführt wird.