第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但存在一些差异。
第四版针对 Lua 5.3,可在 Amazon 和其他书店购买。
购买本书,您还可以帮助支持 Lua 项目。
用 Lua 编程 | ||
第四部分。C API 第 29 章。管理资源 |
在前一章中实现数组时,我们无需担心管理资源。它们只需要内存。表示数组的每个用户数据都有自己的内存,由 Lua 管理。当数组变成垃圾(即程序无法访问)时,Lua 最终会收集它并释放其内存。
生活并不总是那么容易。有时,对象需要除原始内存之外的其他资源,例如文件描述符、窗口句柄等。(通常,这些资源也仅仅是内存,但由系统的其他部分管理)。在这种情况下,当对象变成垃圾并被收集时,必须以某种方式释放那些其他资源。一些面向对象语言提供了针对该需求的特定机制(称为终结器或析构函数)。Lua 以 __gc
元方法的形式提供终结器。此元方法仅适用于用户数据值。当一个用户数据即将被收集且其元表具有 __gc
字段时,Lua 会调用此字段的值(应为一个函数),并传递用户数据本身作为参数。然后,此函数可以释放与该用户数据关联的任何资源。
为了说明此元方法和整个 API 的用法,在本章中,我们将开发两个从 Lua 到外部设施的绑定。第一个示例是遍历目录的函数的另一个实现。第二个(也是更重要的)示例是与Expat(一个开源 XML 解析器)的绑定。
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |