Hallo,
auch, wenn das Thema schon seeeehhhr alt ist, wollen wir ja für alle spätern Leser eine Lösung bereitstellen:
In ermittle_geschwister wird eine Stringlist mylist erzeugt, an result zugewiesen und wieder freigegeben. Da Objekte immer als Referenz übergeben werden, wird damit auch das result freigegeben, da es die Stringliste nur einmal gibt.
Du musst das Freigeben des Ergebnisses immer außen machen:
Delphi-Quellcode:
function TMensch.ermittle_geschwister: TStringlist;
var
i: Integer;
begin
IF self.Kinder.Count = 0
THEN
BEGIN
exit;
END;
TRY
result := TStringList.Create;
FOR i:=0
TO self.Kinder.Count-1
DO
result .Add(self.Kinder.Strings[i]);
Except ON E:
Exception DO
END;
end;
procedure TForm1.Button1Click(Sender: TObject);
var geschwister:Stringlist;
begin
Vater := TMensch.Create('
Steffen');
Vater.Maennlich := true;
Mutter := TMensch.Create('
Kathrin');
Mutter.Maennlich := False;
Kind := Mutter.erzeuge_kind(Vater,'
Philipp');
geschwister := Vater.ermittle_geschwister;
if assigned(geschwister)
then
try
showmessage(geschwister.Text);
finally
freeAndNil(geschwister);
end;
end;