gpt4 book ai didi

memory-leaks - 在Lua中,我应该在不使用时将所有表元素分配给nil吗?

转载 作者:行者123 更新时间:2023-12-01 11:40:18 24 4
gpt4 key购买 nike

比如我就这样创建了一个表

myTable = {}
for n=1,5
local item = {
name = "item"..n,
id = n,
}
myTable[n] = item
end

当这张表不再被使用时,为了给垃圾收集器释放这张表,

我是否需要遍历表格以将每个元素分配给 nil?

for n=1,5
myTable[n] = nil
end

或者我只需要将表分配给 nil?

myTable = nil

除上述之外,如果表格元素具有分配给其他表格的某些属性,我是否也需要单独将它们设为零怎么办?

for n=1,5
myTable[n].someTable = nil
myTable[n] = nil
end
myTable = nil

最佳答案

只需分配 myTable = nil 即可。您可以使用 __gc 元方法这样测试它:

myTable = {}
for n=1,5 do
local item = {
name = "item"..n,
id = n,
}
setmetatable(item, {__gc = function (self) print("item " .. n .." collected") end})
myTable[n] = item
end

myTable = nil

collectgarbage()

输出:

item 5 collected
item 4 collected
item 3 collected
item 2 collected
item 1 collected

这意味着所有 item 表都由垃圾收集器收集。

关于memory-leaks - 在Lua中,我应该在不使用时将所有表元素分配给nil吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com