![]() |
Free im Constructor erlaubt/möglich?
N'abend ihr. :hi:
Gibt es da Probleme, bzw. sollte/kann man dieses anders lösen? (hab's noch nicht getestet, aber ich wüßte nicht, warum es nicht gehn sollte) Der Grund ist einfach, daß innerhalb des Contructors oder darin aufgerufener Prozeduren Exceptions geworfen werden könnten und ich ein Speicherleck verhindern möchte. im Prinzip hab ich es erstmal so implementiert:
Delphi-Quellcode:
praktisch wird (es soll zumindestens) das Objekt wieder freigegeben, wenn es nicht ordnungsgemäß erstellt werden konnte.
Constructor TXMLAttributes.Create(...);
Begin Inherited Create; Try ... Except Free; Raise; End; End; himi :angel: |
Re: Free im Constructor erlaubt/möglich?
Um den Constructor abzubrechen und damit die Freigabe des in der Instanziierung befindlichen Objektes zu erreichen, ist nur durch werfen (oder re-raise) einer Exception möglich.
Somit auf deinen Code angewandt: Das Free wird automatisch vom Compiler gemacht, da du eine Exception im Constructor wirfst. Von daher ist der gesamte try/except Block unnötig, da es ohne diesen schon alles so macht wie du es wünscht. |
Re: Free im Constructor erlaubt/möglich?
Na das ist ja practisch, aber wie sollte man denn darauf kommen :shock:
|
Re: Free im Constructor erlaubt/möglich?
Das ist der Grund, warum die Erzeugung und Verwendung eines Objekts normalerweise so aussieht:
Delphi-Quellcode:
Wenn im Konstruktor eine Exception auftritt, dann wird automatisch das Objekt wieder aufgeräumt. Wenn danach eine auftritt, dann muss man diese abfangen. ;-)
xy := Txy.Create;
try ... finally xy.Free; end; |
Re: Free im Constructor erlaubt/möglich?
Zitat:
|
Re: Free im Constructor erlaubt/möglich?
Zitat:
Zitat:
|
Re: Free im Constructor erlaubt/möglich?
Zitat:
Funktionsergebnisse werden bei einer Exceptions nur mehr zugewiesen, also selbst wenn das Objekt nicht bei einer Exception freigegeben würde, würde dennoch keine Referenz an die Variable übergeben. Und wenn da nun nichts innerhalb des Objektes freigegeben würde, dann würde das Objekt nun ohne irgendeine Referenz darauf irgendwo rumliegen. Zitat:
nja, dann ist das (nichtvorhandene) Problem ja behoben :angel2: Danke :angel: |
Re: Free im Constructor erlaubt/möglich?
Zitat:
Zitat:
|
Re: Free im Constructor erlaubt/möglich?
Zitat:
Zitat:
(wie oben nacheditiert) würde bei einer Exception so oder so das Funktionsergebnis (hier die Objektreferenz) NICHT an die Variable übergeben, also könnte man eh nicht diese Variable nehmen um das ganze Freizugeben ... |
Re: Free im Constructor erlaubt/möglich?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz