首页 > lua中userdata和gc的使用?

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数据不对,删除时异常,这是为何?


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


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

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

【热门文章】
【热门文章】