AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 11 versteht mein generic nicht mehr

Ein Thema von Elrond · begonnen am 18. Okt 2021 · letzter Beitrag vom 20. Okt 2021
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Delphi 11 versteht mein generic nicht mehr

  Alt 20. Okt 2021, 15: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz