7
Rozważmy następujący przykład:Luabridge słabe odniesienie do danych LuaRef
function Process()
local Container=NewContainer()
Container:On(EventType.Add,function()
Container:DoSomething()
end)
-- Does not Garbage Collect
end
W luabridge, przechowywać function()
jak LuaRef
który przedłuża żywotność dla Container
i nie będzie GCed bo to RefCountedObjectPtr
Tutaj jest rozwiązanie, które używam w użyciu słabego tabeli, która działa, ale wygląda brzydko:
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
Czy jest jakiś sposób, aby uzyskać LuaRef
, który działa podobnie do tego? A może jest inne obejście?
jeśli przyjąć swoją odpowiedź, dostaniesz mniej ludzi patrzeć na swoje pytanie. Nadal możesz je zaakceptować później. –