Einzelnen Beitrag anzeigen

Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#6

Re: Vor- und Nachteile von FreeAndNil und Free

  Alt 1. Apr 2008, 22:49
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;
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat