Basics



  • Hallo zusammen...

    2 Fragen:
    Kann ich in einem Konstruktor ne Exception schmeissen oder wird da
    Speicher alloziiert, der nicht mehr freigegeben wird?

    Kann ich auf einem Object das 0 ist immer delete aufrufen oder muss
    ich da Seiteneffekte erwarten?

    Beispiel:

    Test * t = 0;
    try{
      t = new Test(); //hier kann ne Exception geworfen werden...
    }
    catch(...){
    }
    delete t;
    

    Ich weiß, dass ich hier das delete auch in den try-Block packen könnte...

    CSpille



  • CSpille schrieb:

    2 Fragen:
    Kann ich in einem Konstruktor ne Exception schmeissen oder wird da
    Speicher alloziiert, der nicht mehr freigegeben wird?

    Wenn ein Ctor eine Exception schmeißt garantiert der C++ Standard, dass Speicher für nicht konstruierte Objekte automatisch freigegeben wird.
    Den try-catch-Block brauchst du also hier nicht. Wenn du allerdings Ressourcen im Ctor selbst anlegst, musst du die natürlich selbst freigeben.

    CSpille schrieb:

    Kann ich auf einem Object das 0 ist immer delete aufrufen oder muss
    ich da Seiteneffekte erwarten?

    delete auf einem Nullpointer ist als noop garantiert und damit frei von Seiteneffekten.



  • Cool, danke...

    Den try-catch-Block hab ich, weil ich nen QSocket aufmachen will und wenn
    es misslingt, soll er nicht starten ...


Anmelden zum Antworten