Einzelnen Beitrag anzeigen

tommie-lie
(Gast)

n/a Beiträge
 
#6

Re: Wichtigkeit von Try...Finally...End

  Alt 19. Jan 2006, 19:59
Zitat von Elvis:
btw, dein Problem verstehe ich trotzdem nicht ganz. Das Freigeben des DataSets hätte doch nur duch eine Exception im Destructor vom ProgressDialog verhindert werden können. Die wiederum hätte dir doch auffallen müssen....
Die einzige Konstellation, bei der ich mir vorstellen könnte, daß etwas in die Hose geht, wäre, wenn der Konstruktor von TJvProgressDialog Mist baut, eine Exception wirft *und* Mist zurückgibt. Dann steckt hinter ProgressDialog alles mögliche, nur kein gültiges Objekt. Durch die Exception springt's in den finally-Abschnitt, wo die Methode Free aufgerufen wird, aber da nix Vernünftiges bei rauskommt. Allerdings deutet das auf einen gehörigen Fehler in der RTL hin, wenn ein Konstruktor eine Exception wirft, bleibt zumindest die Instanz des Objektes gültig und ein FreeInstance() sollte nicht fehl schlagen. Aber vielleicht war es ja auch der Code des Destruktors von TJvProgressDialog, der auf unsaubere Felder zugegriffen hat.
Ich bin mir zwar nicht sicher, aber ich meine, bei try..finally wird bei einer Exception im finally-Block auch aus dem finally-Block herausgesprungen, bevor er vollständig abgearbeitet ist. Das wäre die einzige plausible Erklärung, die ich so ohne weiteres wüsste, ohne mich nochmal damit beschäftigen zu müssen, was Delphi da anstellt.


Und Exception-Handling ist performancetechnisch so billich, da kann man lieber mal eins zu viel nehmen als eins zu wenig.
  Mit Zitat antworten Zitat