DESTRUCTOR
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgDestructor
- 最后更新: 2018-08-29
当类或用户定义类型超出作用域或被销毁时自动调用。
语法
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
MySubend 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 新增
另请参阅
ClassConstructorDelete StatementDestructor (Module)Type
返回 目录