Lua - 当对象从内存中删除时减少“class”对象计数。

我正在使用Lua开发一个MOAI项目。我正在尝试为某些游戏对象设置一些压力测试,并在游戏会话期间跟踪我拥有的Lua对象何时被创建和销毁。我可以通过在构造函数或初始化程序中增加计数来轻松跟踪何时初始化了“class”对象/表。但是,由于Lua没有析构函数,我不知道如何跟踪对象何时从内存中删除。

非常感谢任何关于此事的帮助或建议。谢谢!

点赞
用户107090
用户107090

要在 Lua 对象(我假设是 full userdata 或 table)被销毁时收到通知,你需要为它设置一个 _gc 元方法

2013-03-14 18:02:14
用户1919833
用户1919833

也许弱表(weak tables)嵌套是你的答案。以下是一个片段:

objectArray={}

function newObj(...)
   --你的面向对象编程代码在这里
   --obj是你创建的新表
   objectArray[#objectArray+1]=setmetatable({obj},{__mode='v'})
end

现在,在每帧运行的函数/块中:

for i=1,#objectArray do --没有使用pairs是为了提高效率,因为每帧都在运行
   local stillThere=#objectArray[i]
   stillThere=stillThere==1
   if not stillThere then deconstruct() end
end

不幸的是,你无法再次获取表。我不确定是否有简单的解决方案,因为 __index 会停止垃圾回收。

2013-03-18 22:11:03