Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#6

AW: [XE3] Operator Overloading, Verhalten?

  Alt 20. Mär 2014, 17:26
Ich denke eher das Verhalten bei localVar1 ist der Fehler.
Richtig, der Compiler "vergisst" an der Stelle den Aufruf von CopyRecord usw., so dass die Werte nicht überschrieben werden.
Bei den beiden anderen Varianten wird der Record nach dem Operator jeweils überschrieben.

Ich glaube auch nicht, dass das Absicht ist.
Rate mal, warum ich ständig predige, daß man ein Result "immer" vollständig initialisieren muß.

Delphi-Quellcode:
function GetStr(Value: integer): string;
begin
  Result := Result + IntToStr(i);
end;

var
  i: Integer;
  S: string;
begin
  S := '';
  for i := 0 to 100 do
    S := S + GetStr(i);
  ShowMessage(S);
end;
Denn bei Records (über 8 bytes oder mit gemanageten Typen) und gemanageten Typen (Strings, Interfaces usw.) baut der Compiler das intern so um.
Delphi-Quellcode:
procedure GetStr(Value: integer; var Result: string);
begin
  Result := Result + IntToStr(i);
end;

var
  i: Integer;
  S, AutoTempVar: string;
begin
  S := '';
  for i := 0 to 100 do begin
    GetStr(i, AutoTempVar);
    S := S + AutoTempVar;
  end;
  ShowMessage(S);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Mär 2014 um 17:28 Uhr)
  Mit Zitat antworten Zitat