Als Result nur im gezeigten Code wird diese vorher freigegeben ( im finally), was
imho keinen Sinn macht.
Die Form-Instanz wird eben
nicht freigegeben, ausser es kommt innerhalb der Methode zu einer
Exception, dann wird abgebrochen, demzufolge nichts zurückgegeben und darum durch das
finally
die Instanz freigegeben.
Das ist eigentlich eine sehr übliche und sinnvolle Vorgehensweise wenn man
nicht auf Speicherlecks steht.
Delphi-Quellcode:
function FooFactory : TFoo;
var
LFoo : TFoo;
begin
LFoo := TFoo.Create;
try
...
Result := Lfoo;
LFoo :=
nil;
// auf nil setzen
finally
// bei einer Exception wird die Instanz freigegeben,
// sonst nicht, denn dann zeigt LFoo ja auf nil ;o)
LFoo.Free;
end;
end;
Auch wenn es sich im Beispiel um eine Komponente mit Owner handelt, was für eine korrekte Freigabe durch den Owner sorgt. Eine ungenutzte Instanz im Speicher ist zuviel und solche Fehler (Speicher läuft im Betrieb voll) sind nachher nur schwer zu finden, denn beim Beenden gibt es kein Speicherleck, dafür ist irgendwann der Speicher voll und die Anwendung verabschiedet sich.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)