Thema: Delphi Zeiger freigeben

Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Zeiger freigeben

  Alt 16. Jun 2005, 22:14
Moin!

Zitat von TomDooley:
Soll ich nun den Zeiger wie ich's gemacht habe in der zweiten Funktion disposen oder macht man in solchen Fällen in der TestClassA eine Prozedur, die dann einfach dispose(PTestRecord) aufruft (und in der Button1Click-Prozedur aufgerufen wird)?
Nach dem Dispose() zeigt aber der erste Eintrag der Liste ins Nirvana, da du den Speicherbereich freigegeben hast, wo der Record liegt und wo der Eintrag der Liste hinzeigt. Die Liste gibt dir ja nur einen Pointer zurück auf die Stelle im Speicher wo der Record liegt. Nun musst du aber den reinen Pointer den du beim Button Click bekommst aber nicht freigeben, da es wie eine Integer Variable ist - und die musste auch nicht freigeben.

Grundsätzlich musst du den Speicher für den Record freigeben, wenn du den Eintrag löscht in der Liste - weil die Liste verwaltet nur Zeiger, die zweiss nix von dem Typ und kann daher auch nicht den Speicher freigeben.

Zitat von TomDooley:
Die selbe Frage stellt sich natürlich auch wenn man statt mit TList mit TObjectList arbeiten würde (und dann Objekte auflistet). Dann würde aber nur der Weg über eine Funktion der Klasse TTestClassA funtktionieren, oder?
Da ist es ja so, das du auch nur eine Referenz auf das Objekt bekommst. Würdest du das Objekt freigeben, dann zeigt der Eintrag der Objektliste an der Stelle ins Nirvana, weil das Objekt weg ist. Daher würde ein späterer Zugriff auf das Objekt krachen.

Ausserdem hat die TObjectlist die einfache Möglichkeit das man ihr sagen kann (ist sogar Standardeinstellung ->OwnsObjects), dass sie beim Entfernen eines Objektes aus der Liste, dieses auch freigibt (->Delete()). Wenn dies nicht gewünscht ist, dann kann man auch Remove() nutzen, welches das Objekt zurück gibt, den Eintrag aus der Liste entfernt aber das Objekt nicht freigibt.

MfG
Muetze1
  Mit Zitat antworten Zitat