Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )


Referenz - DESTRUCTOR (Klassen)

Referenz-Navigation

 

Syntax:

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.

Dieses Schlüsselwort ist nur zulässig, wenn mit der Kommandozeilenoption

-lang fb

kompilliert wird; siehe FB-Dialektformen.

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 BefehlsreferenzeintragCONSTRUCTOR-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 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(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
GETKEY

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
   GETKEY
END SUB

Ausgabe:

Erstelle:  main.x
Erstelle:  main.scope.x
Zerstoere: main.scope.x
Erstelle:  MySub.x
Zerstoere: MySub.x
Zerstoere: main.x

Hinweis: Klassen-Destruktoren werden beim Benutzen des Befehls BefehlsreferenzeintragEnd nicht aufgerufen, wohl aber BefehlsreferenzeintragModul-Destruktoren.

Unterschiede zu QB: Neu in FreeBASIC

Unterschiede zu älteren FreeBASIC-Versionen:
DESTRUCTOR für Klassen existiert seit FreeBASIC v0.17.

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


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