Dein Delete ist falsch implementiert, denn: Das inherited Delete löscht das entsprechende Element
und verkürzt die Liste. Somit gibst du mit .Free nach dem inherited Aufruf das
nachgerückte Element frei. Wenn du das letzte Element löscht sogar ein nicht existierendes, etc. Damit baust du dir selber eine nicht existierende Instanz in deine Liste.
Wenn du ein Element aus einer TList haben willst ohne de Index freizugeben, dann nimm ihn einfach mit
Items und weise Nil zu. Ansonsten bei TObjectList gibt es auch ein entsprechendes
Extract().
Nochwas: Wenn du Nil Einträge in deiner TList (oder Nachfahre) hast, dann kannst du dir einfach mit der Methode
Pack entfernen lassen.
/-------- roter Kasten --------
Das "Ja" (von Christian Seehase) ist falsch: Luckie fragt, ob
er die Items nachrücken muss. Dem ist nicht so, TList macht dies. Daher trotzdem abgeschickt...
/EDIT2: Korrektur zu der Schleife:
Wenn du sie brauchen tätest, was hier ja erklärterweise nicht der Fall ist, dann müsste die Schleife theoretisch nur bis Count-2 laufen, da du schliesslich mit Index+1 immer den Nachfolger holst. Diese darf somit auch nicht Count-1 überschreiten, daher nochmals -1, da dem +1 Rechnung getragen werden muss.
Delphi-Quellcode:
for i := Index to Self.Count - 2 do
begin
Self.Items[Index] := Self.Items[Index + 1];
end;