Im Großen und Ganzen - dann, wenn du das Objekt auf <> NIL checkst. Also falls ein paar deiner Funktionen solche checks haben, wirds Fehler geben, falls die Instanz schon zerstört wurde.
Delphi-Quellcode:
var
X: TControl;
begin
X := TControl.Create( Self );
X.Parent := Self;
Randomize;
case Random(2) of
0: X.Free;
else
FreeAndNil( X );
end;
if Assigned( X ) then // #1#
X.Free;
#1#: Falsl bei der zuvorigen case Abfrage 0 das Ergebnis war, dann wurde das Objekt nur zerstört, die Variable X enthält jedoch noch die Adresse. Somit schlägt Assigned fehl, da es auf NIL prüft ... wohingegen FreeAndNil wie schon gesagt wurde, die Variable nach dem Zerstören auch auch NIL setzt.
MfG