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 останавливает сборщик мусора.

Другие вопросы по тегам