我有一段这样的代码
class Test
{
public:
Test() {printf(">>> Test()\n");}
~Test() {printf(">>> ~Test()\n");}
}
int myFunc(lua_State *L)
{
Test t;
luaL_error(L, "error");
return 0;
}
我知道当 lua 由 c 编译器编译时,它使用 longjmp 来引发错误。因此,我使用 c++ 编译器编译它,以便它使用 c++ 异常来处理错误,并且即使抛出错误也应该调用析构函数。但我的问题是对象的析构函数没有被调用。
但是,以下代码正在运行(调用了析构函数)
int myFunc(lua_State *L)
{
Test t;
throw(1) // just for testing
return 0;
}
为什么会这样?我确定 LUAI_THROW 宏被解释为 throw 关键字。