Referenz - DESTRUCTOR (Klassen)
Syntax A:
TYPE TypeName
' Feld-Deklarationen
DECLARE DESTRUCTOR [ () ]
END TYPE
Synax B:
DESTRUCTOR Typename [ () ]
' Anweisungen
END DESTRUCTOR
Typ: Prozedur
Kategorie: Programmorganisation
Ein Klassen-Destruktor ist eine Prozedur, die aufgerufen wird, sobald eine UDT-Variable (user definded type - siehe
TYPE (UDT)) zerstört wird.
- 'TypeName' ist der Name eines UDTs, wie er unter
TYPE (UDT) erklärt wird. - 'Feld-Deklarationen' sind die Deklarationen, die den UDT oder die Klasse ausmachen. Siehe dazu
TYPE (UDT),
PROPERTY,
OPERATOR. - Die Parameterliste muss bei Destruktoren leer sein.
- 'Anweisungen' ist ein Programmcode, der den Regeln einer SUB folgt.
Die Destruktor-Prozedur wird aufgerufen, sobald eine UDT-Variable zerstört wird. Dies ist dann der Fall, wenn das Programm beendet wird oder der
SCOPE-Block, innerhalb dessen sie erstellt wurde, an ihr Ende kommt.
Innerhalb der
CONSTRUCTOR-Prozedur kann über das Schlüsselwort
THIS auf die Records des UDTs zugegriffen werden.
Enthält der zu zerstörende UDT selbst Felder, die Klassen mit eigenen Destruktoren darstellen, so wird der Destruktor des UDTs vor denen der Records aufgerufen.
Innerhalb eines Types kann nur ein einziger Destruktor erstellt werden.
Klassen-Destruktoren MÜSSEN PUBLIC sein; siehe
PUBLIC (UDT).
Das Destructor-Schlüsselwort leitet einen eigenen SCOPE-Block ein. Siehe dazu auch
SCOPE.
Beispiel 1: Praxisnaher Einsatz zur automatischen Speicherfreigabe mit
DeAllocate:
TYPE T
intPtr AS INTEGER Ptr
DECLARE CONSTRUCTOR ( value AS INTEGER )
DECLARE DESTRUCTOR ( )
DECLARE OPERATOR CAST () AS STRING
END TYPE
CONSTRUCTOR T ( value AS INTEGER )
This.intPtr = ALLOCATE(1)
*This.intPtr = value
END CONSTRUCTOR
DESTRUCTOR T ()
DEALLOCATE This.intPtr
END DESTRUCTOR
OPERATOR T.Cast () AS STRING
RETURN STR(*This.intPtr)
END OPERATOR
DIM x AS T = 10
PRINT x
SLEEP
Ausgabe:
10
Beispiel 2: Zeitliche Abfolge des Erstellens und Zerstörens unter verschiedenen Bedingungen: Modulebene, Scope-Ebene, Prozedurebene.
TYPE T
value AS ZSTRING * 32
DECLARE CONSTRUCTOR ( init_value AS STRING )
DECLARE DESTRUCTOR ()
END TYPE
CONSTRUCTOR T ( init_value AS STRING )
value = init_value
PRINT "Erstelle: "; value
END CONSTRUCTOR
DESTRUCTOR T ()
PRINT "Zerstoere: "; value
END DESTRUCTOR
SUB MySub
DIM x AS T = ("MySub.x")
END SUB
DIM x AS T = ("main.x")
SCOPE
DIM x AS T = ("main.scope.x")
END SCOPE
MySub
SUB Quit DESTRUCTOR
SLEEP
END SUB
Ausgabe:
Erstelle: main.x
Erstelle: main.scope.x
Zerstoere: main.scope.x
Erstelle: MySub.x
Zerstoere: MySub.x
Zerstoere: main.xHinweis: Klassen-Destruktoren werden beim Benutzen des Befehls
End nicht aufgerufen, wohl aber
Modul-Destruktoren.
Unterschiede zu QB: Neu in FreeBASIC
Unterschiede zu älteren FreeBASIC-Versionen: DESTRUCTOR für Klassen existiert seit FreeBASIC v0.17.
Unterschiede unter den FB-Dialektformen: DESTRUCTOR ist nur in
-lang fb zulässig
Siehe auch:
DESTRUCTOR (Module),
CONSTRUCTOR (Klassen),
TYPE (UDT),
NAMESPACE
| Zusätzliche Informationen und Funktionen | ||||
|---|---|---|---|---|
|
||||




FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!
Versionen