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.


Anmelden zum Antworten