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
Screen 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.