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)