Einzelnen Beitrag anzeigen

WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#2

AW: Komplexe TList kopieren

  Alt 2. Feb 2011, 15:01
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.
  Mit Zitat antworten Zitat