System.TObject.DisposeOf

Aus Appmethod Libraries
Wechseln zu: Navigation, Suche

Object Pascal

procedure DisposeOf; {$IFNDEF AUTOREFCOUNT} inline; {$ENDIF}

C++

void __fastcall DisposeOf(void);

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
procedure
function
public
System.pas
systobj.h
System TObject

Beschreibung

DisposeOf veranlasst die Ausführung des Destruktors in einem Objekt.

Die neuen mobilen Object Pascal-Compiler führen ein neues Dispose-Muster ein, das durch den Aufruf der Methode DisposeOf implementiert wird, die den Destruktorcode ausführt, auch wenn Variablen mit ausstehenden Referenzen auf das Objekt vorhanden sind. Nach dem Aufruf der Methode DisposeOf wird das Objekt in einen bestimmten Status gesetzt, den Disposed-Status. Das bedeutet, dass der Destruktor nicht erneut aufgerufen wird, wenn DisposeOf wieder aufgerufen wird oder wenn der Referenzzähler null erreicht (wenn der Speicher freigegeben wird).

Das Verhalten von DisposeOf ist für die beiden Generationen von Object Pascal-Compilern unterschiedlich:

  • Bei den Object Pascal-Desktop-Compilern (DCC32, DCC64, DCCOSX) bleibt die Auswirkung des Aufrufs von DisposeOf unverändert, wie beim Aufrufen von Free.
  • Bei den mobilen Object Pascal-Compilern (DCCIOS32, DCCIOSARM) wird der Destruktorcode zum gleichen Zeitpunkt wie bei den Object Pascal-Desktop-Compilern ausgeführt, aber der Speicher wird von der automatischen Referenzzählung verwaltet.
type
  TMySimpleClass = class
  private
    //
    stringMember: String;
    constructor Create(Text: String);
    destructor Destroy;
  end;

constructor TMySimpleClass.Create(Text: String);
begin
  stringMember := Text;
end;

destructor TMySimpleClass.Destroy;
begin
  // dies wird beim Aufrufen der Methode DisposeOf ausgeführt.
end;

var
  myObject: TMySimpleClass;
begin
  myObject := TMySimpleClass.Create
    ('This is a code snippet indicating the usage of the DisposeOf method');
  if not myObject.Disposed then
    myObject.DisposeOf;
  //Ab hier befindet sich das Objekt im Disposed-Status.
end.

Siehe auch