Destructor
 
当类或用户定义的类型超出范围或被销毁时自动调用

语法

Type typename
field declarations
Declare Destructor ( )
End Type

Destructor typename ( )
statements
End Destructor

参数

typename
TypeClass的名称

说明

当用户定义TypeClass变量超出范围或使用Delete操作符显式销毁时,将调用析构函数方法。

typename 是声明和定义Destructor方法的类型的名称。typename 的名称解析遵循与Namespace中使用的过程相同的规则。

Destructor方法传递一个隐藏的This参数,其类型与typename 相同。

一个类型中的析构函数在它的任何字段上的析构函数之前被调用。因此,所有字段都可以通过析构函数体中隐藏的This参数访问。

每个类型只能声明和定义一个析构函数。

由于End语句不会关闭任何范围,如果End语句用于终止程序,对象析构函数将不会自动调用。

Destructor也可以像其他成员方法(Sub)直接从typename 实例调用,并具有相同的语法,即使用成员访问操作符,例如obj .Destructor().该对象及其所有成员被假设为构造并处于有效状态,否则其效果未定义并可能导致崩溃。在手动构建obj 的情况下,此语法很有用。与obj.Constructor() Placement 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

输出:
Creating: main.x
Creating: main.scope.x
Destroying: main.scope.x
Creating: A.x
Destroying: A.x
Destroying: main.x
方言差异

  • 仅在-lang fb 方言中支持对象相关功能。

与QB差别

  • 新的FreeBASIC

参考