Frage zu try/catch



  • TStringList *list = new TStringList();
    ...
    try
    {
        list->SaveToFile(filename);
        delete list;
    }
    catch (...)
    {
        delete list;
    }
    

    Steht "delete list" im try-Block richtig, wenn SaveToFile nicht ausgeführt werden kann? Oder sollte man das umformulieren?



  • Hallo

    falsch ist das nicht, aber besser als

    TStringList *list = new TStringList();
    ...
    try
    {
        list->SaveToFile(filename);
    }
    catch (...)
    {
    }
    delete list;
    

    ist es nicht.

    Wenn du wirklich Exception-sicheren Code schreiben willst, sollte der so aussehen

    #include <memory>
    ...
    try
    {
        // auto_ptr löscht automatisch das übergebene Objekt, sobald
        // der eigene Scope verlassen wird. Egal ob regulär oder durch Exception
        std::auto_ptr<TStringList> list(new TStringList());
        list->SaveToFile(filename);
    }
    catch (...)
    {
    }
    

    bis bald
    akari



  • Danke. Kann man außer try-catch noch auf eine andere Art feststellen, ob SaveToFile fehlerfrei ausgeführt wurde?



  • - Du prüfst nach mit FileExist, ob die Datei vorhanden ist

    - Du rechnest vorher aus, wieviele Bytes geschrieben werden, und schaust dann nach der Dateigröße



  • Ja, danke. Ich hatte (wohl fälschlicherweise) die Hoffnung, dass SaveToFile einen Rückgabewert hat (bool oder so), der mir sagt, obs geklappt hat oder nicht.


Anmelden zum Antworten