【发布时间】:2021-07-27 15:44:04
【问题描述】:
当引用这样的值时:
lua_pushnumber(L, 1);
ref = luaL_ref(L, LUA_REGISTRYINDEX);
多次取消引用ref 是否无害,还是会导致问题?即对于上面的代码多次调用luaL_unref(L, LUA_REGISTRYINDEX, ref) 是否无害,或者每个luaL_ref 调用必须只有一个luaL_unref 调用?
【问题讨论】:
当引用这样的值时:
lua_pushnumber(L, 1);
ref = luaL_ref(L, LUA_REGISTRYINDEX);
多次取消引用ref 是否无害,还是会导致问题?即对于上面的代码多次调用luaL_unref(L, LUA_REGISTRYINDEX, ref) 是否无害,或者每个luaL_ref 调用必须只有一个luaL_unref 调用?
【问题讨论】:
它必须正好是一个luaL_unref。
Lua 将未引用的索引保存在一个链表中,供luaL_ref 以后重用。
两次取消引用相同的索引将导致稍后从luaL_ref 获得该索引两次。这意味着您将覆盖之前提交的数据。
见https://www.lua.org/source/5.4/lauxlib.c.html#luaL_unref
【讨论】: