Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#2

AW: FreeAndNil löscht nur ein Objekt bei gleicher Referenz

  Alt 15. Apr 2017, 11:41
In der Variable kann nur eine Referenz gespeichert werden, also kann FreeAndNil(x), x.Free oder sonstwas natürlich auch immer nur das Letzte freigeben.

Alternative sind Interfaces, wo es eine automatische Speicherverwaltung gibt.

>> Du schreibst hier nacheinander zwei Referenzen in die Variable List.



Außerdem setzt FreeAndNil nur die übergebene Variable auf NIL
und sonst kennt sie nichts.
Delphi-Quellcode:
procedure FreeAndNil(var Obj: TObject);
begin
  Obj.Free;
  Obj := nil;
end;

// aber eigentlich so, wie es auch der Name sagt

procedure FreeAndNil(var Obj: TObject);
var
  Temp: TObject;
begin
  Temp := Obj;
  Obj := nil;
  Temp.Free;
end;
Lösung hier sind Weak-Referenzen, aber diese gibt es nicht in älteren Delphi-Version und ist auch platformabhängig.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Apr 2017 um 11:46 Uhr)
  Mit Zitat antworten Zitat