返回介绍

2.10.1 - 垃圾收集的元方法

发布于 2019-08-25 13:16:32 字数 495 浏览 1430 评论 0 收藏 0

使用 C API , 你可以给 userdata (参见 §2.8)设置一个垃圾收集的元方法。 这个元方法也被称为结束子。 结束子允许你用额外的资源管理器和 Lua 的内存管理器协同工作 (比如关闭文件、网络连接、或是数据库连接,也可以说释放你自己的内存)。

一个 userdata 可被回收,若它的 metatable 中有 __gc 这个域 , 垃圾收集器就不立即收回它。 取而代之的是,Lua 把它们放到一个列表中。 最收集结束后,Lua 针对列表中的每个 userdata 执行了下面这个函数的等价操作:

 function gc_event (udata)
 local h = metatable(udata).__gc
 if h then
 h(udata)
 end
 end

在每个垃圾收集周期的结尾,每个在当前周期被收集起来的 userdata 的结束子会以 它们构造时的逆序依次调用。 也就是说,收集列表中,最后一个在程序中被创建的 userdata 的 结束子会被第一个调用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文