Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 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.
$2B or not $2B
  Mit Zitat antworten Zitat