佚名通过本文主要向大家介绍了lua的userdata的使用,lua light userdata,lua userdata,userdata,userdata是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
    
  
                问题:lua中userdata和gc的使用?
描述:
解决方案1:
                    
 
   
 
 
 
描述:
求教一个问题:定义了一个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数据不对,删除时异常,这是为何?
解决方案1:
私以为,应该是MyClass** c = (MyClass**)lua_touserdata(L, 1);
MyClass *c = (MyClass *)lua_touserdata(L, 1);
原来是这儿错了,应该 MyClass c = (MyClass)lua_touserdata(L, 1);

