Hallo,
ich habe ein grundsätzliches Verständnisproblem was den Rückgabewert einer Funktion angeht.
Bevor ich viel drum herum rede hier einfach zwei code-Beispiele:
Delphi-Quellcode:
function meineFkt(str: String): TMeinTyp;
var x : TMeinTyp;
begin
x:=TMeinTyp.Create;
try
x.property1:='Hallo 1';
x.property2:='Hallo 2';
result:=x;
finally
x.free;
end;
end;
Bei der Obenstehenden Funktion wird kein Wert zurückgegeben (bzw. wird ein Leerstring zurückgegeben).
Schreibe ich hingegen..
Delphi-Quellcode:
function meineFkt(str: String): TMeinTyp;
var x : TMeinTyp;
begin
x:=TMeinTyp.Create;
x.property1:='Hallo 1';
x.property2:='Hallo 2';
result:=x;
end;
..funktioniert alles so wie es sollte. Damit könnte man sich eigentlich zufrieden geben.
Aber ich würde gern dazu zwei Dinge wissen:
1. wann funktioniert result? Nur am Ende einer Funktion / außerhalb von Schleifen?
2. Wenn ich x.free nicht aufrufe, hat das irgendwelche Nachteile, oder wird x sowieso nach Funktionsende wieder freigegeben, da es sich um eine lokale Variable handelt?
An try..finally kann es widerum eigendlich nicht liegen, denn wenn ich folgendes schreibe klappt es auch nicht:
Delphi-Quellcode:
function meineFkt(str: String): TMeinTyp;
var x : TMeinTyp;
begin
x:=TMeinTyp.Create;
x.property1:='Hallo 1';
x.property2:='Hallo 2';
result:=x;
x.free;
end;
Kann mir diesbezüglich jemand weiterhelfen?
Das wär wirklich sehr nett!
mfg
changlee