Sehr richtig, Funktionen, die Objekte erzeugen und zurückgeben sind nicht sonderlich elegant (dazu gibt es auch einige Threads hier). IMO ist die erste Lösung (TStrings als Parameter) wann immer möglich vorzuziehen.
[edit] Eine Freigabe des Rückgabewertes könnte so aussehen:
Delphi-Quellcode:
var l: TStrings;
begin
l := Funktion;
try
MachWasMitL;
finally
l.Free;
end;
end;
[/edit]