Skip to content

DESTRUCTOR


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

语法

vb
Type typename

field declarations
Declare Destructor ( )

End Type

Destructor typename ( ) [ Export ]

statements

End Destructor

参数

typename

TypeClass 的名称。

描述

当用户定义的 TypeClass 变量超出作用域,或通过 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 是开源项目,与微软公司无隶属关系