什么是弱引用



我试图理解弱表/弱引用,但仍然什么都听不懂。

">弱引用是对垃圾收集器不考虑的对象的引用";

我在Lua第一版的编程中发现了这一点,但接下来它说的话真的让我很困惑

">这意味着,如果一个对象只保存在弱表中,Lua最终会收集该对象";

还有这个信息(不是从书中(

"一个对象被认为是";垃圾";如果它有0个引用"0">

local t = {x = val} -- x is a weak reference because val isn't considered as "garbage" even after getting removed, x is still a reference of val
val = nil
collectgarbage() --you'd expect {} to be collected
for i, v in pairs(t) do
print(v) --prints the table
end

对象只保存在一个弱表(即t(中,但Lua不收集它。我仍然可以打印该表,该表没有被垃圾收集器丢弃。

Lua 5.1参考手册也证明了这一信息

"换句话说,如果对对象的唯一引用是弱引用,那么垃圾收集器将收集该对象">

我收集的信息或显示的代码有什么问题吗?我很不善于学习,所以我不得不问很多问题。如果是,请给我正确的信息和一些具体的例子。

EDIT:我现在明白了弱表和弱引用是如何工作的,我还学到了关于table.insert((的新东西:我可以用table.inser特((插入表,这看起来很神奇。

首先,您必须将表声明为弱(即,具有弱键或弱值,或两者兼有(

local weak = setmetatable({}, {__mode="v"}) -- Create table weak with weak values

然后你可以在表中存储一个对象

table.insert(weak, {"hello", "world"})

由于除了表中的值之外,没有其他对对象的引用,因此GC将在下次运行时收集它。然后,整个键值对将从表中消失,它将是空的,因为没有其他巴黎。

相关内容

  • 没有找到相关文章

最新更新