c++ - rand_max - Referencia débil de Luabridge a los datos de LuaRef
strstr c++ (1)
Considere el siguiente ejemplo:
function Process()
local Container=NewContainer()
Container:On(EventType.Add,function()
Container:DoSomething()
end)
-- Does not Garbage Collect
end
En luabridge, almaceno la function()
como LuaRef
que extiende la vida útil del Container
y no será GCed porque es un RefCountedObjectPtr
Aquí hay una solución que utilizo para usar una tabla débil que funciona, pero se ve fea:
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
¿Hay alguna manera de tener un LuaRef
que funcione de manera similar a esto? O tal vez hay otra solución?
Esta es la forma en que abordo este problema:
- Cree una clase contenedora alrededor de la clase C + + luabridge (si tiene la
class Display.A()
en C ++, cree la claseA()
en Lua) - Almacene una tabla débil dentro de esa clase contenedora (
self.WeakTable={}
ysetmetatable(self.WeakTable, { __mode = ''k'' })
) - En la tabla débil, referencia propia: (
self.WeakTable.self=self
) - Pase
self.WeakTable
a C ++ y almacénelo comoLuaRef
- esto lo hará gc Crea una función de contenedor así:
Container:On(EventType.Add,function(WeakTableParams) WeakTableParams.self.Callback(); end)