Lua中带__gc元方法的对象终结器调用顺序是否为创建逆序?
Lua中带__gc元方法的对象终结器调用顺序
在Lua里,带有__gc元方法的对象,其终结器的调用顺序是确定的——遵循反向创建顺序:后创建的对象会先被调用终结器。
回到你的代码:
function fun() local o1 = foo:new() -- object with __gc metamethod local o2 = bar:new() -- object with __gc metamethod end
当fun执行完毕,局部变量o1和o2都会被标记为可回收。此时Lua会优先调用o2的终结器,之后再调用o1的终结器。
需要注意的是,这个规则仅适用于同一垃圾回收周期内被标记的对象;如果对象在不同周期被标记回收,它们的终结器顺序就不再遵循反向创建规则,但同一周期内的对象必然按反向顺序执行。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

