如何在lua中删除引用表?

我该如何删除一个我引用的表以清除内存?

例如:

a = {"a"}
b = a

-- 仅使用b删除a

将b设置为nil只会移除引用,那么我该如何仅使用b删除它所引用的表?

点赞
用户734069
用户734069

你做不到。

如果某人拥有该表的引用,那么他们就拥有了该引用。Lua不能让你单方面删除其他人的内容。

现在,你可以通过让某人间接使用表来尝试这样做:

a = {{"a"}}
b = a
a[1][1] == "a" --如何访问表。
b[1] = nil
a[1][1] == "a" --运行时失败,由于“nil”访问。

通常,此类用法会被命名而不是编号:

a = {name = {"a"}}
b = a
a.name[1] == "a" --如何访问表。
b.name = nil
a.name[1] == "a" --运行时失败,由于“nil”访问。

但是,无论哪种方式,这都不会阻止某人这样做:

a = {name = {"a"}}
b = a
local c = a.name --本地存储
a.name[1] == "a" --如何访问表。
b.name = nil
c[1] == "a" --仍然有效。

Lua通常情况下不能使您具有将其他人的数据捞出并玩弄他们的东西的能力。

2016-11-26 23:50:33