Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Try-finally-end Frage
Sephiroth - Mi 13.08.03 08:32
Titel: Try-finally-end Frage
Hi Leute,
Ich programmiere jetzt schon seid ner weile Delphi und komm auch ganz gut klar damit, aber mir ist aufgefallen das ich absolut keine Ahnung hab für was ich den try-finally-end Block brauche. Der try-except-end Block macht Sinn aber für was brauch man das finally? Man kann doch dann ebensogut alles ohne diesen Block schreiben oder?
Danke schonmal für die Erklärung :D
Delete - Mi 13.08.03 08:45
Könnte man. Aber nur, wenn du eventuell Speicherlöecks in deinem Adressraum provozieren willst. Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var sl: TStringlist; begin sl := TStringlist.Create; try sl. ...; sl.SaveToFile('c:\windows\test.txt'); finally sl.Free; end; |
Angenommen das Speichern schlägt fehl, weil der Benutzer keine Schreibrechte im Windows-Verzeichnis hat. Dann kommt es in deinem Programm zu einem Fehler. Ohne try-finally würde jetzt deine Stringliste nicht mehr freigegeben und du hättest ein Speicherloch in deinem Adressraum zur Laufzeit deines Programmes. Beim Beenden räumt zwar Windows hinter dir auf, aber zur Laufzeit hast du eben ein Speicherloch in deinem Adressraum. Und wenn dir das öfters passiert und du auch an anderer Stelle unsauber programmiert hast und mit dynamischen Arrays arbeitest, dann kann dir durch aus recht schnell der Speicher ausgehen.
Sephiroth - Mi 13.08.03 09:18
Müsste dann doch mit try-except-end genau so klappen oder? Ich meine wenn ein Fehler passiert, dann des Objekt freisetzen. Wo ist da der unterschied?
Alfons-G - Mi 13.08.03 09:29
Der entscheidende Unterschied zwischen try - except - end und try - finally - end ist der, dass ein finally-Block IMMER ausgeführt wird und ein except-Block nur im Fehlerfall.
DU kannst auch beide Blöcke gleichzeitig verwenden.
Im finally-Block gibt man Ressourcen frei und erledigt weitere Aufgaben, welche immer ausgeführt werden müssen, gleich ob das Programm korrekt läuft, oder ein Fehler vorliegt.
Im except-Block wird dagegen die reine Fehlerbearbeitung vorgenommen.
8)
Delete - Mi 13.08.03 09:30
Sephiroth hat folgendes geschrieben: |
Müsste dann doch mit try-except-end genau so klappen oder? Ich meine wenn ein Fehler passiert, dann des Objekt freisetzen. Wo ist da der unterschied? |
Und wenn keiner auftriit?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!