Einzelnen Beitrag anzeigen

changlee
(Gast)

n/a Beiträge
 
#1

Rückgabewert von Funktionen / evtl. Problem mit try..finally

  Alt 2. Dez 2004, 14:34
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
  Mit Zitat antworten Zitat