我在 C++ 中有以下类
class B;
class A {
B* GetB();
void SetB(B*& b) { _b = b;};
private:
B* _b;
}
以及部分lua绑定代码:
int A::setB(lua_State* L) {
A* a = checkA(L,1) // Macro for luaL_checkudata
B* b = checkB(L,2) // again similar macro
a->SetB(b);
return 0;
}
int A::getB(lua_State* L) {
A* a = checkA(L,1) // Macro for luaL_checkudata
B* b = a->GetB();
// how do i return the already created userdata for this B* instance?
// right now I am doing
B** bp = (B**)lua_newuserdata(L, sizeof(B*));
*bp = b;
luaL_getmetatable(L, "B");
lua_setmettable(L, -2);
return 1;
}
我想将这些作为用户数据包装在 Lua 中,这样我就可以执行以下操作:
local a = a.new() -- create new userdata
local b = b.new() -- create new userdata
a:SetB(b) -- associate B with A
local b2 = a:GetB() -- get the B associated with A back, and stored as b2
当我打印的地址时b
,b2
我得到两个唯一的地址,这是有道理的,因为我已经调用了lua_newuserdata
. 但理想情况下,我希望它返回相同的用户数据,因为它们指向相同的内存块。如何做到这一点?
我希望 Lua 负责内存,因此它会在垃圾收集时被正确删除。所以我不知道轻用户数据是否可能。