Hallo,
mal eine "blöde" Frage. Was ist der Unterschied zwischen diesen beiden Code Fragmenten:
Delphi-Quellcode:
function TMyClass.DecodeBytes(const Source: TBytes): TBytes;
begin
Result := Source;
if Length(Result) > 0 then
Decode(Source[0], Result[0], Length(Source));
und
Delphi-Quellcode:
function TMyClass.DecodeBytes(const Source: TBytes): TBytes;
begin
SetLength(Result, Length(Source));
if Length(Result) > 0 then
Decode(Source[0], Result[0], Length(Source));
Vor allem in Bezug auf Speicherallokation und den Fall, wo jemand
das Funtionsergebnis weiterhin benutzt, obwohl der Aufrufer den
Parameter Source schon wieder freigegeben/anderweitig benutzt hat.
Kopiert die Wertzuweisung des ersten Falls die Daten um, so wie es
Move auch täte nur dass bei der Zuweisung Result vorher noch sauber
dimentioniert wird oder wird da Result nur auf die Adresse von Source
gesetzt? (eher unwahrscheinlich für mich, aber ich will das verstehen)