【发布时间】:2016-12-07 16:37:10
【问题描述】:
如果我创建一个 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 和少量用户数据吗?
【问题讨论】:
标签: c++ lua lua-userdata