Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Form soll sich selbst zerstören

  Alt 4. Nov 2022, 14:35
Wenn ein Objekt sich selbst freigibt, dann darf es außerhalb keine Variablen geben, welche darauf zeigen, bzw. niemand darf mehr darauf zugreifen.

Ausnahme: Das Objekt setzt selbstständig diese (globale) Variable z.B. im Destructor auf NIL, womit dann Prüfungen alla Assigned überhaupt erst funktionieren können.
z.B. im TForm.Destroy ein Form2 := nil; oder if Form2 = Self then Form2 := nil;


Alternativ kann man bei TForm TCustomForm auch im globalen Delphi-Referenz durchsuchenScreen nachsehen, ob es dort aktuell eine Form gibt, welche dem Objektzeiger (und besser optional oder zusätzlich dem gespeicherten ClassType) entspricht.


Seit einer Weile gäbe es auch das [Weak]-Attribut und auch [Unsafe].
var [weak] X: TObject; , wo Delphi die Variable automatisch auf NIL setzt, wenn das Objekt freigegeben würde, aber Dieses funktioniert nicht überall, bzw. es ist nötig, dass für die jeweilige Platform z.B. ARC vorhanden ist.
https://docwiki.embarcadero.com/RADS...d_Conditionals -> WEAKREF



Zitat:
if ((Form2 <> nil) and (Assigned(Form2))) then
<>nil und Assigned ist das Selbe Gleiche

und es funktioniert nicht, wenn die Variable auf etwas zeigt, was es aber dort nicht mehr gibt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Nov 2022 um 14:48 Uhr)
  Mit Zitat antworten Zitat