Как кто-то упоминает здесь, вы можете попробовать использовать слабые таблицы .
Если у вас есть такой код:
myListOfObjects = {}
...
table.insert(myListOfObject, anObject)
Затем, как только anObject
перестанет использоваться, оно никогда не будет освобождено, поскольку myListOfObjects
все еще ссылается на него.
Вы можете попробовать удалить ссылку в myListOfObjects
(установив ссылку на ноль), но более простое решение объявляет myListOfObjects
слабой таблицей :
myListOfObjects = {}
setmetatable(myListOfObjects, { __mode = 'v' }) --myListOfObjects is now weak
Учитывая, что setmetatable
возвращает ссылку на изменяемую таблицу, вы можете использовать эту более короткую идиому, которая делает то же, что и две предыдущие строки:
myListOfObjects = setmetatable({}, {__mode = 'v' }) --creation of a weak table