弱引用

Lua采用了自动内存管理,垃圾回收会自动删除那些已成为垃圾的对象,然而对于用户所认为的垃圾,如 栈 ,Lua却不认为是垃圾而不进行回收。
弱引用table(weak table)就是为这个问题所产生的一种机制,告诉Lua一个引用不该阻碍一个对象的回收。

a = {}
b = {__mode = 'k'}
setmetatable(a,b)       -- 现在‘a’的key就是弱引用
key = {}                       -- 创建第一个key
a[key] = 1
key = {}                       -- 创建第二个key
a[key] = 2
collectgarbage()         -- 强制进行一次垃圾回收
for k, v in pairs(a) do print(v) end
-->2  

__mode:
k -- key值为弱引用
v -- value值为弱引用

metatable = {__mode = 'kv'}

你可能感兴趣的:(弱引用)