Die typischen Einsatzfälle sind:
Free (genügt) immer dann, wenn das Objekt freigegeben werden soll und Objektvariable anschließend keine Funktion mehr erfüllt.
FreeAndNil immer dann, wenn das Objekt freigegeben werden soll und die Objektvariable anschließend noch eine Funktion zu erfüllen hat.
In beiden Fällen wird das Objekt freigegeben. Bei Free verbleibt die Objektvariable jedoch in einem "unbestimmten" Zustand (sie verweist weiterhin auf den Speicher, an dem das Objekt einmal stand). FreeAndNil hingegen gewährleistet, dass die Objektvariable anschlißend nil ist. Ein Zuweisen von Nil an die Objektvariable nach einem Aufruf von Free wäre nicht gleichwertig, da im Fehlerfall die Zuweisung eventuell nicht ausgeführt werden würde (
Exception).
Beispiel:
Delphi-Quellcode:
type
TExample = class(TObject)
private
FMyObject: TObject;
public
property MyObject: TObject read FMyObject write FMyObject;
constructor Create;
destructor Destroy;
end;
{ TExample }
constructor TExample.Create;
begin
inherited;
FMyObject:=TObject.Create;
end;
destructor TExample.Destroy;
begin
FreeAndNil(FMyObject); { oder } FMyObject.Free; { ? }
inherited;
end;