AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu mehreren Try's

Ein Thema von Stefan Hueg · begonnen am 20. Jun 2006 · letzter Beitrag vom 20. Jun 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 19:25
es muss auch nicht immer finally sein. folgendes geht auch:
Delphi-Quellcode:
try
  objekt := TObjekt.Create;
  try
    objekt.dosomething;
    objekt.accessfragilethings;
  except
    ShowMessage('Fehler beim arbeiten mit dem Object');
  end;
  objekt.Free;
except
  ShowMessage('Fehler beim erstellen des Objectes');
end;
Eben aus diesem Grund ist mir bis heute unbekannt wozu "finally" im zusammenhang mit "try" überhaupt existiert.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 19:32
Zitat von DGL-luke:
*sich von Khabarakh bestätigt sieht*

Ein Ressourcenschutzblock sieht (bei mir) so aus:

Delphi-Quellcode:
objekt := TObjekt.Create;
try
  objekt.dosomething;
  objekt.accessfragilethings;
finally
  objekt.Free;
end;


(für ein zusätzliches except muss man tatsächlich schachteln! Zumindest bei D2005PE)
Das geht grundsätzlich, nur ist damit nicht sichergestellt ob das Objekt vorher überhaupt instanziert wurde, kann also zum Fehler führen
Stefan Hueg
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 19:38
Dann mache es doch so:
Delphi-Quellcode:
try
  objekt := TObjekt.Create;
  try
    objekt.dosomething;
    objekt.accessfragilethings;
  finally
    objekt.Free;
  end;
except
  ShowMessage ('Fehler');
end;
Damit ist sichergestellt, daß objekt freigegeben wird, falls es erzeugt werden konnte.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 20:29
^Shmia würde euch für diese art von aufruf von try...except lynchen... siehe sein TUTORIAL
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#15

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 20:37
@SirThornberry: Naja, es kommt sehr selten vor, dass man eine Exception in der Methode, die sie wirft, auch wieder auffängt. Also hat try-finally schon seine Berechtigung.

@Stefan Hueg: Nope, DGL-Lukes Methode ist dicht wie Wasser ... äh ... wasserdicht. Wird eine Exception im Konstruktor ausgelöst, wird der Schutzblock gar nicht mehr ausgeführt.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 21:03
Zitat von inherited:
^Shmia würde euch für diese art von aufruf von try...except lynchen... siehe sein TUTORIAL
und @Khabarakh:

Habe mir sein Tutorial mal durchgelesen, dort wird der Konstruktor nicht in den Resourcenschutzblock aufgenommen.
In meinem genannten Programm kann ja, rein theoretisch, der Konstruktor von TIniFile ja zum Fehler führen (aus welchen Gründen auch immer).

Daher möchte ich ihn gerne in einen separaten Schutzblock aufnehmen. Das Beispiel

Delphi-Quellcode:
try
  objekt := TObjekt.Create;
  try
    objekt.dosomething;
    objekt.accessfragilethings;
  finally
    objekt.Free;
  end;
except
  ShowMessage ('Fehler');
end;
erscheint mir dabei sinnvoll. Es wird sowohl der Konstruktor als auch der Rest sicher geschützt. Elegant oder nicht, es ist meines Erachtens nach wasserdichter als wenn man den Konstruktor einfach nur Konstruktor sein lässt und seinem Schicksal überlässt.

Ich kann mich auch täuschen, aber ich versuche nur (bitte dafür nich hauen) das Programm so wasserdicht wie möglich zu machen. Dabei ist es die Frage, was man nicht explizit schützen muss, und beim Konstruktor bin ich mir eben unsicher.
Stefan Hueg
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#17

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 21:13
Wie schon gesagt, DGL-Lukes Methode ist wirklich wasserdicht. Du verwechselst/vermischst da zwei Sachen, ein try-except-Block ist kein Ressourcenschutzblock.
Der Block in deinem Beispiel schützt nichts, außer vielleicht den Benutzer vor dem Standard-Exception-Dialog .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 21:15
Irgendwie will das nicht in meinen Kopf...Schlägt der Konstruktor fehl kann man das Objekt nicht freigeben da es erst gar nicht instanziert wurde -> Fehler entsteht der nicht behandelt wird?
Stefan Hueg
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Frage zu mehreren Try's

  Alt 20. Jun 2006, 21:53
Nein... löst der Konstruktor eine Exception aus, wird die Prozedur abgebrochen -> das "try" wird gar nicht angeschnitten -> das finally auch nicht -> es wird nicht versucht, etwas freizugeben. Die Exception bubbelt sich dann ihren Weg hinauf, eventuell bis zur messagebox.

Und nochwas: Wenns schon im Konstruktor knallt, kann mans eh vergessen
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz