Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - DESTRUCTOR (Klassen)

Referenz-Navigation

 

Syntax A:

TYPE TypeName
    ' Feld-Deklarationen
    DECLARE DESTRUCTOR [ () ]
END TYPE

Synax B:

DESTRUCTOR Typename [ () ]
   ' Anweisungen
END DESTRUCTOR

Typ: Prozedur
Kategorie: Klassen

Ein Klassen-Destruktor ist eine Prozedur, die aufgerufen wird, sobald eine UDT-Variable (user definded type - siehe BefehlsreferenzeintragTYPE (UDT)) zerstört wird.

Die Destruktor-Prozedur wird aufgerufen, sobald eine UDT-Variable zerstört wird. Dies ist dann der Fall, wenn eine mit BefehlsreferenzeintragNEW erstellte Variable mit BefehlsreferenzeintragDELETE zerstört wird, wenn der BefehlsreferenzeintragSCOPE-Block, innerhalb dessen die Variable erstellt wurde, an sein Ende kommt oder wenn das Programm beendet wird.

Achtung: Wird das Programm mit BefehlsreferenzeintragEND beendet, findet kein automatischer Aufruf der Klassen-Destruktoren statt! Die Destruktoren müssen gegebenenfalls zuvor explizit aufgerufen werden. BefehlsreferenzeintragModul-Destruktoren werden dagegen bei der Verwendung von END vor Programmende aufgerufen.

Innerhalb der Destruktor-Prozedur kann über das Schlüsselwort BefehlsreferenzeintragTHIS auf die Attribute 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 Attribute aufgerufen.

Innerhalb eines Types kann nur ein einziger Destruktor erstellt werden.

Klassen-Destruktoren müssen BefehlsreferenzeintragPUBLIC sein.

Das Schlüsselwort DESTRUCTOR leitet einen eigenen SCOPE-Block ein. Siehe dazu auch BefehlsreferenzeintragSCOPE.

Beispiel 1: Praxisnaher Einsatz zur automatischen Speicherfreigabe mit BefehlsreferenzeintragDEALLOCATE:

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( SIZEOF(INTEGER) )
  *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.x

Unterschiede zu QB: neu in FreeBASIC

Unterschiede zu früheren Versionen von FreeBASIC: DESTRUCTOR für Klassen existiert seit FreeBASIC v0.17.

Unterschiede unter den FB-Dialektformen: DESTRUCTOR ist nur in Befehlsreferenzeintrag-lang fb zulässig.

Siehe auch:
BefehlsreferenzeintragDESTRUCTOR (Module), BefehlsreferenzeintragCONSTRUCTOR (Klassen), BefehlsreferenzeintragTYPE (UDT), BefehlsreferenzeintragNAMESPACE, BefehlsreferenzeintragObjektorientierung


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 17.07.2007 von RedakteurJojo angelegt.
  • Die aktuellste Version wurde am 05.08.2020 von Redakteurnemored gespeichert.
  Versionen Versionen