考虑以下示例:
function Process()
local Container=NewContainer()
Container:On(EventType.Add,function()
Container:DoSomething()
end)
-- Does not Garbage Collect
end
在luabridge中,我将function()
存储为LuaRef
,这延长了Container
的生命周期,因为它不是GC,因为它是RefCountedObjectPtr
这是一个解决方法,我用来使用一个有效的弱表,但它看起来很难看:
function Process()
local Container=NewContainer()
local ParamsTable={ Container=Container }
setmetatable(ParamsTable, { __mode = 'k' })
Container:On(EventType.Add,function()
ParamsTable.Container:DoSomething()
end)
-- Garbage Collects fine
end
有没有办法让LuaRef
具有与此相似的功能?或许还有另一种解决方法?
答案 0 :(得分:1)
以下是解决此问题的方法:
class Display.A()
,在Lua中创建类A()
)self.WeakTable={}
和setmetatable(self.WeakTable, { __mode = 'k' })
)self.WeakTable.self=self
)self.WeakTable
传递给C ++并以LuaRef
的形式存储 - 这将是gc 创建一个像这样的包装函数:
Container:On(EventType.Add,function(WeakTableParams)
WeakTableParams.self.Callback();
end)