需要遍历由以下类创建的所有对象,并在它们变得无用之后将其销毁;
Function.prototype.apply()
答案 0 :(得分:1)
Lua中的表受GC影响。当它们变得“无用”时,简单地放弃所有引用,除非你关闭垃圾收集,否则它们的“破坏”将自然发生。
手动对表格进行GC处理的示例:
local mytable = {}
print(mytable)
print(collectgarbage('count'))
mytable = nil
collectgarbage()
print(collectgarbage('count'))
--[[stdout (approximation):
table: 0x7fa821c066f0
23.7412109375
22.81640625
]]
如果要保留您创建的实例的记录,可以在表中存储对它们的引用。只需从表中删除它们就会导致GC清理它们,假设没有其他引用被保留。
像这样的天真:
local my_instances = {}
local function create_instance ()
local t = {}
my_instances[#my_instances + 1] = t
return t
end
local function destroy_instances ()
for i = 1, #my_instances do
my_instances[i] = nil
end
end
或者,您可以创建一个弱表,这样您就可以对程序中仍有外部引用的任何实例进行操作。再次,当此表之外的所有引用都丢失时,GC将启动。
local my_instances = setmetatable({}, {
__mode = 'k'
})
local function create_instance ()
local t = {}
my_instances[t] = true
return t
end