在程序终止时指定一个过程的执行
语法
说明
定义一个从编译程序的终端代码自动调用的过程。终端代码由编译器生成,并在程序正常终止时执行。定义为析构函数的过程可以与普通过程相同的方式使用,也就是说可以从模块级代码中调用它们以及其他过程。
该过程必须有一个空参数列表。如果在具有一个或多个参数的子定义中使用Destructor关键字,则将生成编译时错误。在一组重载过程中,由于具有多个不含参数的子集的含义,所以只能定义一个(1)析构函数。
在单个模块中,析构函数通常按照定义的顺序执行。
priority 属性(介于101和65535之间的整数)可用于强制析构函数以特定顺序执行。priority 的值没有具体含义,只有数字与其他析构函数优先级的关系。101是最低优先级,最后执行。具有priority 属性的所有析构函数在没有属性的析构函数之后执行。优先级值65535与不赋值优先级值相同。
模块可以定义多个析构函数。析构函数也可能出现在多个模块中。使用上述语法定义的所有过程将被添加到程序终止期间要调用的过程列表。
在多个模块中定义的析构函数的顺序仅在链接时才会被知道。因此,当使用可能调用二次模块的析构函数时,也应特别注意同时定义析构函数。在这种情况下,建议使用单个析构函数在多个模块中显式调用终止程序,以确保应用程序正常终止。
如果程序正常终止或启用了错误检查并且程序异常终止,则将调用析构函数。
例子
Sub pauseonexit Destructor
''如果程序到达结束,或者出现错误中止,
''它将在关闭之前运行这个析构函数
Print "按任意键结束程序..."
Sleep
End Sub
Dim array(0 To 10, 0 To 10) As Integer
Dim As Integer i = 0, j = 11
''下一行将导致程序中止
''如果编译使用数组边界检查启用错误(fbc -exx ...)
Print array(i, j)
与QB差别
参考