FreeBASIC マニュアルのトップに戻る

FreeBASIC Destructor

目次→言語リファレンス→変数とデータ型→ユーザ定義型DESTRUCTOR←オリジナル・サイト

DESTRUCTOR 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい


クラスかユーザ定義型が、範囲から出るか、または使えなくするとき、自動的に呼ばれます。

構文:
Type typename
field declarations
Declare Destructor ( )
End Type

Destructor typename ( ) [ Export ]
statements
End Destructor

パラメタ:
typename
ClassType の名前

記述:
解体メソッドは、ユーザの定義 Type か、Class 変数が、範囲から出るとき、または Delete Statement 演算子を使って明示的に削除されるときに、呼ばれます。

typename は、Destructor メソッドが宣言され、定義される型の名前です。
typename のための名前解決は、Namespace で使われる手続きとして、同じ規則に従います。

Destructor メソッドは、typename と同じ型の、隠された this パラメタを、渡されます。

型の中の解体子は、型のどの項目の解体子より先に、呼ばれます。
したがって、すべての項目は、解体子本体の中で、隠された this パラメタを使って、アクセスできます。

型ごとに、宣言および定義できる解体子は 1つだけです。
(ただし、その型が、他の型自身の解体子を含むか継承している場合は、複数の解体子を連鎖的に呼び出すことができます。)

End 命令文は、どの範囲も閉じないので、End 命令文が、プログラムを終了させるのに使われても、オブジェクト解体子は、自動的には、呼ばれません。

Destructor も、他のメンバー・メソッド(Sub)のように、そして同じ構文、つまり、メンバー・アクセス演算子(例えば、obj.Destructor() を使用して、typename インスタンスから直接呼ぶことができます。
オブジェクトと、すべてのそのメンバーは、構築されて、有効な状態にあると仮定されます。
そうでないと、その影響は未定義で、事故の原因となる場合があります。
この構文は、obj が手で構築された場合、役に立ちます。例えば、obj.constructor()演算子 配置 Newで。


例:
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 "作成します: ";value
End Constructor

Destructor T ()
  Print "解体します: ";value
End Destructor

Sub MySub
  Dim x As T = ("A.x")
End Sub

Dim x As T = ("main.x")

Scope
  Dim x As T = ("main.scope.x")
End Scope

MySub
Sleep


出力:

作成します: main.x
作成します: main.scope.x
破壊します: main.scope.x
作成します: A. x
破壊します: A. x
破壊します: main.x ←何故か渡辺の画面には表示されません(^^ゞ

方言差:
QBからの違い:
参照:
ユーザ定義型 に戻る

←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2018-08-29 07:17:23
日本語翻訳:WATANABE Makoto、原文著作者:JeffMarshall

ホームページのトップに戻る

表示-非営利-継承