Wenn man interfaces benutzt, sollte man nur interfaces nehmen und keinen Mischmasch. Denn wie erkennt man, wo man etwas manuell freigeben muss und wo nicht? Also nichts gegen die Lösung, aber als isolierte Lösung hier würde ich das nicht machen.
Die eigentliche Frage ist ja (wenn man Sherlock's law beachtet) Wie erkennt man (wie im Beispiel des TE), das die Funktion eine Liste liefert, die man freigeben muss? Wer ist hier wirklich der Ersteller?
Ich würde das so lösen, das die Funktion eine Methode ist, die in eine ihr übergebene Liste die Tiernamen anhängt, und eben keine neue Instanz liefert.
Delphi-Quellcode:
Procedure FillTiere (aDestination : TStringList);
begin
aDestination.Add('Hund');
aDestination.Add('Katze');
aDestination.Add('Maus');
end;
Dann kann man sie so aufrufen:
FillTiere(ListBox.Items)
oder so:
Delphi-Quellcode:
tmp := TStringList.Create;
Try
FillTiere (tmp);
ListBox.Items.Assign(tmp);
finally
tmp.Free
end
Somit ist klar, wer Ersteller ist.