Lua 中的析构函数?

有没有可能在 Lua 中不使用 userdata 添加析构函数?

http://www.lua.org/notes/ltn006.html 看起来很有希望(实际上就是我想要的);但这是一个针对 Lua 4.0 的路径。

基本上,我想要一种在表被回收时调用函数的方法。

谢谢!

原文链接 https://stackoverflow.com/questions/3078440

点赞
stackoverflow用户126042
stackoverflow用户126042

metatables文档中得知:

元表可以控制一个对象在算术运算、顺序比较、联接、长度操作和索引中的表现方式。一个元表也可以定义一个函数,用于在userdata被垃圾回收时调用。

Lua用户Lua FAQ指出:

为什么\_\_gc\_\_len元方法不能用在表上?

用户数据对象通常需要在对象即将被删除时运行一些显式析构函数,并为此提供了__gc元方法。 但是,出于效率考虑,这在表上是不允许的。

通常,在表上不需要设置析构函数,因为表会自动删除,并且表包含的任何引用将被正常地垃圾回收。 一个可能的解决方法是创建一个userdata;将表作为userdata的环境表,并在表中放置一个对userdata的引用。(确保这是对userdata的唯一引用。)当表变得可收集时,将运行userdata的__gc元方法;在发生这种情况之前,Lua实际上不会销毁表,因为表由userdata引用。

所以,如果你想获得__gc事件,那么你需要手动将表包装在userdata中。

2010-06-20 09:43:52