Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#30

AW: Zwei Objekte in einem oder zwei Try Finaly Blöcke?

  Alt 15. Apr 2015, 15:18
Wenn Du als Nutzer obiges Programm ausführst und B.Create knallt - warum auch immer - wirst Du mit dem Programm nicht glücklich werden.
Ob da noch Speicher allociert ist oder nicht, wäre da nebensächlich.

Du erfährst als Nutzer nicht, dass die Überweisung nicht funktioniert hat.
Ok, es wird kein Speicher verschwendet aber das ist doch sowas von egal.

Besser wäre, wenn es eine Fehlermeldung gibt. Entweder eine Schutzverletzung oder eine nette Erklärung wie "Die Überweisung konnte nicht durchgeführt werden!".
In jedem Fall muss die Software gefixt (oder einer neue Version verkauft ) werden.
Natürlich sollte man einen Fehler bei der Überweisung abfangen und entsprechend reagieren. Es könnte ja ganz einfach sein, daß das Konto nicht gedeckt ist. Dann hilft auch eine neue Programmversion nicht weiter, da die Software ja nicht die Ursache des Fehlers ist.

Es könnte aber sein, daß TMyClass irgendwelche Resourcen anfordert (z.B. eine Verbindung zum Bankrechner), die es im Destruktor wieder freigibt. Dann sollte das finally aber ganz sicher durchlaufen werden. Es ist dabei sogar möglich, daß im Destroy eine Exception geworfen wird, die darauf hinweist, daß z.B. diese Verbindung nicht sauber geschlossen werden konnte. Also können auch Aufrufe wie B.Free noch eine Exception werfen. Nicht immer hat man auch die Kontrolle über diese Klassen, wenn die z.B. aus einer Bibliothek kommen.

Ich würde mich also in keinem Fall darauf verlassen, daß ein Create oder Destroy schon keine Exception auslöst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat