Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#3

Re: TListBox Objekte löschen

  Alt 20. Okt 2009, 11:07
Zitat von martin_:
Das Problem ist nämlich folgendes: Meiner Meinung erzeugt die Listbox für jedes hinzugefügte Objekt eine Kopie. Wird das ursprüngliche Objekt (cont) an einer anderen Stelle freigegeben, ist es in der Liste noch vorhanden.
Tja, aber das ist wirklich auch nur deine Meinung. Delphi kann nicht einfach Objekte kopieren, hier gibt es keine Copy Constructoren wie bei C++. Das Objekt existiert nur einmal, die Instanzenvariablen wie cont sind nur Zeiger auf das eigentliche Objekt im Speicher. Beim Hinzufügen wird nur dieser Pointer in die Listbox eingetragen. Somit hast du 2 Pointer die auf den gleichen Speicher, ergo das gleiche Objekt zeigen. Das ist eine 1:n Beziehung. Wenn du nun das Objekt freigibst, z.B. mit .free, dann ist das Objekt im Speicher nicht mehr vorhanden, aber cont und Objects[] zeigen noch dahin wo es mal war. Wenn du nun mit FreeAndNil() arbeitest wird zumindest eine Stelle (cont) sogar noch auf einen definierten Wert gesetzt, aber der andere Pointer nicht.

Grundlegend ist dein Problem ein Designproblem. Du missachtest hier vor allem die Grundregel der Trennung von Code und Daten. Die Objekte müsstest du dir irgendwo unabhängig von der Darstellung halten. Damit ist immer gewährleistet wo du deine Informationen gesichert holen kannst, da der Ort gepflegt wird und die Referenz darstellt. Damit hast du eine zentrale und Oberflächen-unabhängige Stelle wo du Daten anlegst, veränderst und freigibst. Damit hast du dort auch die Möglichkeiten eine Aktualisierung der Oberfläche anzustoßen, etc. Wenn das der Fall ist, stellt sich deine Frage nicht mehr, da du niemals in der ListBox nachschauen brauchtest nach dem Objekt.
  Mit Zitat antworten Zitat