C++ LuaRef数据的Luabridge弱参考
考虑以下示例:C++ LuaRef数据的Luabridge弱参考,c++,data-binding,lua,luabridge,C++,Data Binding,Lua,Luabridge,考虑以下示例: function Process() local Container=NewContainer() Container:On(EventType.Add,function() Container:DoSomething() end) -- Does not Garbage Collect end 在luabridge中,我将函数()存储为LuaRef,它延长了容器的生存期,它不会被GCed,因为它是RefCountedObject
function Process()
local Container=NewContainer()
Container:On(EventType.Add,function()
Container:DoSomething()
end)
-- Does not Garbage Collect
end
在luabridge中,我将函数()
存储为LuaRef
,它延长了容器的生存期
,它不会被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的功能与此类似?或者可能还有其他解决方法?以下是我处理此问题的方法:
self.WeakTable={}
和setmetatable(self.WeakTable,{{uuu mode='k'})
)self.WeakTable.self=self
)Container:On(EventType.Add,function(WeakTableParams)
WeakTableParams.self.Callback();
end)
如果你接受自己的答案,你会让更少的人看你的问题。以后你还是可以接受的。