Hallo,
folgendes Sachverhalt wurde mir zugetragen um meinen Code zu verbessern.
Ich habe eine Funktion namens GetTokenList. Diese Funktion nimmt einen String entgegen (separiert durch ':'), splittet diesen
anhand des Separators auf und schreibt alles in ein Objekt vom Typ TStringList.
Diese TStringList wird in der Funktion allokiert und die Referenz dieses Objektes wird zurückgegeben.
Delphi-Quellcode:
function TfmAppPanel.GetTokenList(sCommand, sSeparator : string) : TStringList;
var
sTmp : string;
sCurrentToken : string;
iPos : Integer;
iRest : Integer;
TokenList : TStringList;
begin
Result := nil;
sTmp := sCommand;
TokenList := TStringList.Create;
iPos := Pos(sSeparator, sTmp);
if iPos > 0 then
begin
repeat
iRest := Length(sTmp) - iPos;
sCurrentToken := LeftStr(sTmp, iPos - 1); // hier können laufzeitfehler entstehen ...
TokenList.Add(sCurrentToken);
sTmp := RightStr(sTmp, iRest);
iPos := Pos(sSeparator, sTmp);
until not (iPos > 0);
if Length(sTmp) > 0 then
begin
TokenList.Add(sTmp);
end;
Result := TokenList;
end;
end;
Nun wurde mir gesagt, gib anstatt der Referenz, TokenList.Text zurück. Der String, der sich in TokenList.Text befindet kann einer anderen Liste zugewiesen werden(AList.Text := GetTokenList(...)) und man kann normal mit der Liste (Alist) wie gewohnt weiterarbeiten. Meine Frage ist, macht diese Änderung Sinn, wenn ja? Warum?
Mein Kenntnisstand sagt, Allokation ist mit viel Rechenleistung behaftet und bei der mir zugetragenen Lösung muss ich noch eine weitere TStringList allokieren, was für mich keinen Sinn ergibt, da es ja Pointer gibt. Wie sieht ihr das? Ist die Lösung berechtigt? Gibt es andere Lösungen?
Gruß inriz