Thema: Delphi Arbeiten mit TList

Einzelnen Beitrag anzeigen

Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#18

Re: Arbeiten mit TList

  Alt 24. Sep 2008, 14:39
TPointerList ist nur ein Dummy-Typ. In TList wird ja einfach PPointerList verwendet. Der Compiler weiß dann, dass der Speicher, auf den der Pointer zeigt, ein array ist. Somit kann man direkt PPointerList[i] aufrufen und der Compiler macht das restliche. Man könnte TPointerList auch definieren als array[0..0] of pointer. Es wird das gleiche rauskommen. Der Typ ist nur dafür da, damit man die eckigen Klammern benutzen kann.

Zitat von Bomberbb:
@littleDave
TPointerList ist so definiert:
Delphi-Quellcode:
 MaxListSize = Maxint div 16;

 TPointerList = array[0..MaxListSize - 1] of Pointer;
Also wird gleich für die maximale Länge der Liste Speicher für die Pointer reserviert und dieser auch nicht zur Laufzeit verändert.
Gott sei dank: nein. Schau dir mal die Funktion TList.SetCapacity an. Dort steht ein ReallocMem, womit neuer Speicher angefragt bzw. wieder freigegeben wird.

Zitat von Bomberbb:
Beim Löschen werden nicht alle folgenden Elemente zurückgeschoben, sondern nur der letzte gültige Pointer an die leere Stelle kopiert.
Leider auch nein:
Delphi-Quellcode:
procedure TList.Delete(Index: Integer);
begin
  { ... }
  if Index < FCount then
 
    // Mit dem Move-Befehl werden alle Pointer, die nach index kommen,
    // um eine Position (4 Byte bei 32Bit-Systemen) nach vorne geschoben

    System.Move(FList^[Index + 1], FList^[Index],
      (FCount - Index) * SizeOf(Pointer));

  { ... }
end;
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat