lua中userdata和gc的使用?

求教一个问题:定义了一个new函数,可以调用成功:

static int auto_new(lua_State *L)
{
    MyClass **c = (MyClass**)lua_newuserdata(L, sizeof(MyClass*));
    *c = new MyClass();
    (*c)->a = 100;

    luaL_getmetatable(L, "luatest.test");
    lua_setmetatable(L, -2);

    return 1;
}

然后在__gc的时候,调用这个函数

static int auto_gc(lua_State *L)
{
    // luaL_getmetatable(L, "luatest.test");

    MyClass *c = (MyClass *)lua_touserdata(L, 1);
    if( c )
    {
        delete c;
    }

    return 0;
}

发现gc的时候,userdata数据不对,删除时异常,这是为何?

阅读 11.1k
2 个回答

MyClass *c = (MyClass *)lua_touserdata(L, 1);

原来是这儿错了,应该 MyClass c = (MyClass)lua_touserdata(L, 1);

新手上路,请多包涵

私以为,应该是
MyClass** c = (MyClass**)lua_touserdata(L, 1);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进