考虑以下示例:
function Process()
local Container=NewContainer()
Container:On(EventType.Add,function()
Container:DoSomething()
end)
-- Does not Garbage Collect
end在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有没有办法让LuaRef的功能与此类似?或者可能有另一种变通方法?
发布于 2013-05-30 23:51:25
下面是我解决这个问题的方法:
class Display.A()中有C++,在Lua中创建类A() ),并在包装类中存储一个弱表( (self.WeakTable.self=self)
class Display.A() self.WeakTable to C++ LuaRef - this将GCH215H116创建一个包装器函数,如下所示:容器:On(EventType.Add,function(WeakTableParams) WeakTableParams.self.Callback();end)
https://stackoverflow.com/questions/16777419
复制相似问题