Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.149 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Destruktor für verkettete Liste

  Alt 11. Jan 2021, 00:11
Die Variablen beinhalten Pointer, die auf einen reservierten Speicherbereich zeigen, in dem die Objektdaten liegen.

Folgendes Beispiel:
Delphi-Quellcode:
var
  Person1, Person2: TPerson;
...
Person1 := TPerson.Create; // hierdurch wird Speicher reserviert und der Pointer weist auf eine Speicheradresse
Person1.Name := 'Max'; // die Daten werden in dem Speicherbereich abgelegt
Person2 := Person1; // die Variable Person2 erhält den gleichen Pointerwert wie Person1 (zeigt also auf die gleiche Stelle)
Person1.Free; // Der Speicherbereich wird wieder freigegeben, "Max" bleibt aber dort stehen und kann ggf. irgendwann wieder überschrieben werden (bis dahin können aber beide Variablen noch mit "Max" arbeiten - sie zeigen halt nur nicht mehr auf korrekt reservierten Speicher)
Person1 := nil; // jetzt kann auf Person1 nicht mehr zugegriffen werden, da diese nicht mehr auf eine Speicherstelle zeigt sondern NULL beinhaltet
Person2 := nil; // setzt auch diese Variable auf NULL - Zugriffe auf beide Variablen führen jetzt zu einem Laufzeitfehler
Das Freigeben und auf NIL setzen, kann man auch mit einem Rutsch erledigen: FreeAndNil(Person1)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat