Gra*_*pes 7 c++ data-binding lua luabridge
请考虑以下示例:
function Process()
local Container=NewContainer()
Container:On(EventType.Add,function()
Container:DoSomething()
end)
-- Does not Garbage Collect
end
Run Code Online (Sandbox Code Playgroud)
在luabridge,我保存function()为LuaRef延伸寿命的Container,它不会是GCed因为它是一个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
Run Code Online (Sandbox Code Playgroud)
有没有办法让LuaRef这个功能与此类似?或许还有另一种解决方法?
这是我解决这个问题的方法:
class Display.A()创建类)A()self.WeakTable={}和setmetatable(self.WeakTable, { __mode = 'k' }))self.WeakTable.self=self)self.WeakTable给 C++ 并存储在 as 中LuaRef- 这将进行 gc创建一个包装函数,如下所示:
Container:On(EventType.Add,function(WeakTableParams)
WeakTableParams.self.Callback();
end)
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |