求教一个问题:定义了一个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);