Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#46

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 16:32
Hallo,

noch einmal zur Klarstellung:

Bei referenzgezählten Daten (dynamische Strings und Arrays, Interfaces) sollte ein Aufruf von Finalize vorgeschaltet werden, damit die internen Verwaltungsinformationen aufgeräumt werden können. Der Compiler erzeugt dabei einen Aufuf der zugehörigen RTL-Routine, die selbst feststellen kann, welche Felder des Records finalisiert werden müssen. Dies sollte mit beliebig geschachtelten Datentypen funktionieren. "Einfache" Zeiger werden von Finalize nicht zerstört.

Bei Referenzen auf Speicherbereiche oder Objekte ist der Programmierer selbst für die Freigabe der referenzierten Objekte verantwortlich. Hierzu wird die komplementäre Routine (GetMem/FreeMem, Create/Free,...) aufgerufen, um den Speicher wieder freizugeben.

Einfache Datentypen (Ordinaltypen, Fließkommatypen, kurze Strings(!),...) benötigen keine Aufräumarbeiten.

Ein Aufruf von FillChar darf erst erfolgen, nachdem die Verwaltungsdaten ordnungsgemäß aufgeräumt wurden. Beachtet man dies nicht, entstehen Memory Leaks.

Gruß Hawkeye
  Mit Zitat antworten Zitat