Zuerst paar Punkte vorweg: wer
Try Finally
ignoriert, weil er es zu dem Zeitpunkt noch nicht braucht und es mal später reinschreiben will, der verdient all seine Probleme. Denn wer
Try Finally
direkt schreibt, sieht wo es happert. Es fällt schon alleine durch den Block auf wo noch etwas fehlt. Wer es nicht macht, den kann man nicht bedauern wenn es paar Stunden an einem Problem hängt. Das sind selbstfabrizierte Probleme.
Wenn man einmal
TempStringlist
als Variablennamen definiert hat, dann bleibt man dabei. Man schreibt es nicht mal TempStringlist, mal Tempstringlist, mal TempstringList. In der Windowswelt ist es egal, es erhöht aber die Lesbarkeit. In anderen BS ist das ein Fehler.
Ich weiß zwar nicht was du machen willst, aber ja, ein Free ist immer nötig.
Wenn du an Result (TStringList) etwas übergeben willst, wie wäre es wenn du es erst erzeugen würdest?
Was meinst du mit kopieren? Willst du tatsächlich nur die Adresse kopieren oder den Inhalt?
Ein Vorschlag:
Delphi-Quellcode:
function ManipulateList(ThatList: TStringlist): TStringlist;
var
TempStringList: TStringlist;
begin
TempStringList := TStringList.Create;
try
TempStringList.AddStrings(ThatList);
//hier irgendwas machen
Result := TStringList.Create;
Result.AddStrings(TempStringlist);
finally
TempStringList.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
sl, slResult: TStringList;
begin
sl := TStringList.Create;
try
for i := 1 to 20 do
sl.Add(IntToStr(i));
slResult := ManipulateList(sl);
ShowMessage(slResult.Text);
slResult.Free;
finally
sl.Free;
end;
end;