gpt4 book ai didi

lua - 如何在Lua中删除表?

转载 作者:行者123 更新时间:2023-12-05 01:01:37 25 4
gpt4 key购买 nike

让我们看看下面的代码。

do
local a = {1,2,3}
function a:doSth()
self = nil
end

a:doSth()

if a then
print("Still has a...")
end
end

我发现这个方法行不通。表 a仍然存在。为什么?
我知道 a = nil可以回收哪个表的内存 a持有。
如何通过表直接获取内存持有 a并像 delete 一样释放内存在 C++ 中?

最佳答案

function a:doSth()
self = nil
end

是语法糖吗
function a.doSth(self)
self = nil
end

你上面的代码,有两个不同的引用表值 {1,2,3} ,一个是通过 local a ,另一个是通过 self函数内部。 nil删除其中一个引用不会更改对表的另一个引用。

对于要考虑用于 gc 收集的表,您必须确保没有引用指向它。例如:
function a:doSth()
a = nil
end

这将通过 a 释放引用,还有来自 self的引用但是当函数结束时,它会自动超出范围。函数调用后, {1,2,3}假设没有其他内容引用该表,将在下一个循环中由 gc 收集。

关于lua - 如何在Lua中删除表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28061733/

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