System.TObject.DisposeOf
Delphi
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 Delphi-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 Delphi-Compilern unterschiedlich:
- Bei den Delphi-Desktop-Compilern (DCC32, DCC64, DCCOSX) bleibt die Auswirkung des Aufrufs von DisposeOf unverändert, wie beim Aufrufen von Free.
- Bei den mobilen Delphi-Compilern (DCCIOS32, DCCIOSARM) wird der Destruktorcode zum gleichen Zeitpunkt wie bei den Delphi-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.