Zitat von
stevewilson:
Ja, das dachte ich mir schon. Aber wie kriege ich das dann hin, ohne einen Array für "cd" zu verwenden?
es muss doch irgendwie möglich sein, ohne pointer bzw. dynamische arrays zu verwenden, ich wollte streng objektorientiert programmieren...
1. Einfach das cd.free entfernen und es sollte laufen. Die Instanz brauchst du doch so lange sie in der Liste ist. Daher: freigeben, wenn du sie aus der Liste entfernst. Und dafür schau dir mal Punkt 2 an
2. Es wurde schon in diesem Thread darauf hingewiesen, dass du die Klasse TObjectList anstatt TList verwenden solltest, da diese Klasse dir alles für Instanzen in einer Liste zur Verfügung stellt und auch die Möglichkeit diese Instanzen beim entfernen aus der Liste mit frei zu geben.
3. Jede Instanz ist im Inneren ein Pointer, Delphi versteckt dies aber nach aussen. Daher arbeitest du so oder so mit Pointern. Deshalb zeigt deine Variable cd und der Eintrag in der Liste (beides sind Zeiger) auf die gleiche Stelle im
RAM (bei dem Code zuvor). Dadurch haben auch beide Listeneinträge die gleichen Daten gehabt (beide zeigten auf ein und die selbe Instanz).