Lua - уменьшение количества объектов класса при удалении объекта из памяти
В настоящее время я работаю над проектом MOAI с использованием Lua. Я пытаюсь настроить стресс-тесты для некоторых игровых объектов и, в свою очередь, отслеживаю, когда объекты Lua, которые у меня есть, создаются и уничтожаются во время игрового сеанса. Я могу легко отслеживать, когда объект / таблица "класса" была инициализируется путем увеличения счетчика в конструкторе или инициализаторе, однако, поскольку Lua не имеет деструкторов, я не уверен, как я могу отслеживать, когда объект был удален из памяти.
Буду признателен за любую помощь или предложения по этому вопросу. Спасибо!
2 ответа
Чтобы получить уведомление, когда объект Lua (я предполагаю, что полные пользовательские данные или таблица) пропали, вы устанавливаете для него метаметод _gc.
Возможно, слабые таблицы - это ваш ответ с вложенностью. Вот фрагмент:
objectArray={}
function newObj(...)
--your OOP code here
--obj is the new table you made
objectArray[#objectArray+1]=setmetatable({obj},{__mode='v'})
end
Теперь в функции / блоке, который запускает каждый кадр:
for i=1,#objectArray do --no pairs for efficiency, being run every frame this matters
local stillThere=#objectArray[i]
stillThere=stillThere==1
if not stillThere then deconstruct() end
end
К сожалению, вы не можете вернуть стол. Я не уверен, есть ли простое решение, потому что __index останавливает сборщик мусора.