Autor Beitrag
Sephiroth
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mi 13.08.03 08:32 
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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 13.08.03 08:45 
Könnte man. Aber nur, wenn du eventuell Speicherlöecks in deinem Adressraum provozieren willst. Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  sl: TStringlist;
begin
  sl := TStringlist.Create;  // Stringlisten Instanze erzeugen
  try
    sl. ...;  // was mit machen
    sl.SaveToFile('c:\windows\test.txt');  // speichern
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: 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)

_________________
Alfons Grünewald
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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?