Bei reinen Werttypen (z.B. Integer) ist das kein großes Prob,
aber sobald man zu Strings stößt, fangen die Probleme an.
Ganz zu schleigen von anderen Objekten wie TLists in dem Record.
Die Variable vom Typ TList speichert ja nur einen Pointer.
Den kannst du kopieren wie du willst, der zeigt immernoch auf dasselbe TList Objekt.
Mit den Strings verhält es sich ähnlich.
Ich hab das mal so getestet:
Delphi-Quellcode:
procedure Test
type
TMyRecord=record
str:array[0..5]of char;
int:Integer;
end;
pMyRecord=^tMyRecord;
var
List1:TList;
List2:TList;
i:TMyRecord;
p:pMyRecord;
begin
List1:=TList.Create;
List2:=TList.Create;
try
i.int:=0;
i.str:='Hase';
ShowMessage(i.str);
List1.Add(@i);
ShowMessage(TMyRecord(List1[0]^).str);
new(p);
try
List2.Add(p);
TMyRecord(List1[0]^):=TMyRecord(List2[0]^);
Inc(TMyRecord(List2[0]^).int);
ShowMessage(IntToStr(TMyRecord(List1[0]^).int));
ShowMessage(IntToStr(TMyRecord(List2[0]^).int));
TMyRecord(List2[0]^).str:='Ratte';
ShowMessage(TMyRecord(List1[0]^).str);
ShowMessage(TMyRecord(List2[0]^).str);
finally
dispose(List2[0]);
end;
finally
list1.Free;
list2.Free;
end;
end;
Komischerweise hat es sogar ein mal funktioniert. Das Problem bei dem Beispiel dürfte die Referenzzählung des Strings sein.