如果我创建一个 userdata 对象并将其存储在表中,然后在 C/C++ 中获取对它的引用,该引用的有效期是多久?只要用户数据保存在 Lua 的表中,C/C++ 中的引用是否保证有效?或者 Lua 运行时会移动 userdata 对象,从而使 C/C++ 对它的引用无效?
这就是我正在做的事情:
// Initially, the stack contains a table
class Foo { ... };
lua_pushstring(L, "my_userdata");
void* mem = lua_newuserdata(L, sizeof(Foo));
new (mem) Foo();
lua_settable(L, -3);
// Later:
lua_pushstring(L, "my_userdata");
lua_gettable(L, -2);
Foo *foo = (Foo*)lua_touserdata(L, -1);
lua_pop(L, 1);
// How long will this pointer be valid?
我最好在这里使用operator new
轻量级用户数据吗?