Exception und New
-
New wirf wenn kein Speicher mehr frei ist bad_alloc, und wenn eine Exception
nicht gefangen wird dann wird das Programm doch von Windows beendet.
Also ist sowas doch schwachsinnig:int* GibMirSpeicher() { int *Speicher = new int; // Wenn hier eine Exception fliegt dann kann if(Speicher == NULL) // doch garnicht mehr auf NULL geprüft werden. return NULL; else return Speicher; }
Also warum prüft man auf NULL, wenn sowieso eine ungefangene Exception das
Programm terminiert oder eine gefangene Exception das Problem behandelt.Vorraussetzung ist halt das man weiß das New immer bad_alloc wirft.
-
Der MSVC wirft zB. keine exception.
Die if-Abfrage in dieser Funktion ist in der Tat absoluter Blödsinn.
-
Also ist man auf der sicheren Seite wenn man schreibt:
int* GibMirSpeicher() { int *Speicher = new int; if(Speicher == NULL) throw bad_alloc; return Speicher; }
-
Ich gehe in meinen Programmen einfach immer davon aus, daß ein new() erfolgreich ist. Grund: Windows (und auch OS/2 seelig) swappen sich lieber zu Tode, bevor sie einen Speichermangel melden. Das System hält das Programm an, wenn es zuviel Speicher anfordert und new() wird nie einen Fehler (ob mit 0 oder als Exception) melden. Vermutlich wird das bei Linux (oder allgemein allen Systemen mit Swap-Mechanismus) auch so sein?
Stefan.
P.S.: Ich bin übrigens ansonsten mit Fehlerbehandlung sehr sorgfältig. Aber ich weigere mich einfach, Fehler zu behandeln, die praktisch nie auftreten können.