Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Warum wird TObject.Free nicht gleich auf nil gesetzt

  Alt 7. Mai 2020, 23:46
Weil du genau genommen Objekte nicht auf nil setzen kannst. Du kannst Variablen die auf Objekte verweißen auf nil setzen.
Und genau darin besteht das Problem. Du kannst 10 verschiedene Variablen haben die alle auf das selbe Objekt verweisen.
Aber weder der Compiler noch sonst wer weiß wer oder was evtl. noch Referenzen auf ein Objekt hat um die entsprechenden Variablen beim Freigeben auf nil setzen zu können.
FreeAndNil ist im Grunde nichts anderes als

Delphi-Quellcode:
objVar.Free;
objVar := nil;
Aber bei FreeAndNil musst du auch explizit die Variable übergeben die du dann auf nil setzen willst.
Mal ein Beispiel:

Delphi-Quellcode:
objVar1 := TObject.Create;
objVar2 := objVar1;
objVar3 := objVar1;

FreeAndNil(objVar1);
Das Objekt hinter objVar1 wird freigegeben und objVar1 ist nil.
objVar2 und objVar3 sind aber immernoch <> nil und zeigen auf den Speicherbereich wo das Objekt vorher war.
Ein Zugriff oder sogar ein weiterer Aufruf von Free oder FreeAndNil auf objVar2 oder objVar3 führt zu einer Zugriffsverletzung.

Aber das Grundverständnisproblem was du hast ist, dass die Variable nur eine Referenz (einen Pointer) auf das eigentliche Objekt im Speicher enthält.
Es macht logisch gesehen daher gar keinen Sinn davon zu sprechen dass sich das Objekt selbst auf nil setzt.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat