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.