Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Delphi 11 versteht mein generic nicht mehr

  Alt 20. Okt 2021, 16:05
Das Problem ist, dass FreeAndNil halt nur für Objekte arbeitet(e).

Jetzt mit der neuen Signatur, wäre eine Unterscheidung zwischen Interface und Objekt möglich. (siehe Post vom Uwe)

Zitat:
Delphi-Quellcode:
procedure FreeAndNil(var Obj);
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;
Rein logisch macht es einfach
Delphi-Quellcode:
procedure FreeAndNil(var Obj);
begin
  if Assigned(Pointer(Obj)) then TObject(Obj).Destroy; // TObject(Obj).Free;
  Pointer(Obj) := nil;
end;

// OK, eigentlich
begin
  try
    if Assigned(Pointer(Obj)) then TObject(Obj).Destroy; // TObject(Obj).Free;
  finally
    Pointer(Obj) := nil;
  end;
end;
Und wenn jetzt in Obj aber ein IInterface liegt, dann kann es beim TObject(Obj).Destroy; nur Probleme geben.

Also erstmal knallt es und da Pointer(Obj) := nil; die Referenzzählung nicht macht,
welche beim IInterface(Intf) := nil; eigentlich auch noch intern ein if Assigned(Pointer(Intf)) then IInterface(Obj)._Release; ausführen würde.
OK, wenn man die Zählung ignoriert, dann stört es nicht, falls es vorher nicht schon knallen würde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat