【发布时间】:2010-04-30 21:47:23
【问题描述】:
我知道 Lua 是 gc-ed。我知道 Lua 可以通过 userdata 处理 c 对象。
这是我的问题:无论如何要注册一个函数,以便在 lua 对 C 用户数据对象进行 gc-ed 时调用它? [基本上是一个析构函数]。
谢谢!
【问题讨论】:
我知道 Lua 是 gc-ed。我知道 Lua 可以通过 userdata 处理 c 对象。
这是我的问题:无论如何要注册一个函数,以便在 lua 对 C 用户数据对象进行 gc-ed 时调用它? [基本上是一个析构函数]。
谢谢!
【问题讨论】:
是的,有一个名为__gc 的metamethod 专门用于此目的。有关详细信息,请参阅Programming in Lua (PIL) 中的Chapter 29 - Managing Resources。
下面的 sn-p 创建一个metatable 并注册一个__gc 元方法回调:
luaL_newmetatable(L, "SomeClass");
lua_pushcfunction(L, some_class_gc_callback);
lua_setfield(L, -2, "__gc");
【讨论】: