Skip to content

DESTRUCTOR ​


当类或用户定义类型超出作用域或被销毁时自动调用。

语法 ​

vb
Type typename

field declarations
Declare Destructor ( )

End Type

Destructor typename ( ) [ Export ]

statements

End Destructor

参数 ​

typename

Type 或 Class 的名称。

描述 ​

当用户定义的 Type 或 Class 变量超出作用域,或通过 Delete Statement 运算符显式销毁时,将调用析构函数方法。

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

Destructor 方法会隐式地传入一个与 typename 类型相同的 this 参数。

类型中的析构函数在其任何字段的析构函数之前调用。因此,在析构函数体中,所有字段均可通过隐式的 this 参数访问。

每个类型只能声明和定义一个析构函数(但如果类型包含或继承了具有各自析构函数的其他类型,则可以链式调用多个析构函数)。

由于 End 语句不会关闭任何作用域,若使用 End 语句终止程序,对象析构函数将不会自动调用。

Destructor 也可以像其他成员方法(Sub)一样,直接通过 typename 实例使用相同语法调用,即使用成员访问运算符,例如 obj.Destructor()。此时假设对象及其所有成员均已构造并处于有效状态,否则其效果未定义且可能导致崩溃。此语法适用于 obj 已手动构造的情况,例如通过 obj.constructor() 或 Placement New。

示例 ​

start GeSHi

vb
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 "Creating: "; value
End Constructor

Destructor T ()
  Print "Destroying: "; 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

end GeSHi

输出:

Creating: main.x
Creating: main.scope.x
Destroying: main.scope.x
Creating: A.x
Destroying: A.x
Destroying: main.x

方言差异 ​

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

与 QB 的区别 ​

  • FreeBASIC 新增

另请参阅 ​

  • Class
  • Constructor
  • Delete Statement
  • Destructor (Module)
  • Type

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系