我已经用MSVC x64编译了LuaJIT,这意味着应该具有完整的C ++异常互操作性according to the official LuaJIT website。
其中之一指出,“ 在C ++框架之间抛出Lua错误是安全的。将调用C ++析构函数。”
我认为这意味着我可以在C ++函数中使用 lua_error 而不用担心堆栈上的对象:
struct Test
{
Test() {std::cout<<"Constructor"<<std::endl;}
~Test() {std::cout<<"Destructor"<<std::endl;}
};
int some_function(lua_State *l)
{
Test t {};
lua_pushstring(l,"error message");
lua_error(l);
return 0;
}
(该函数是在Lua脚本中调用的)
但是,永远不会调用析构函数。那么,网站上的这一点实际上意味着什么?如何使用 lua_error 而不用担心内存泄漏?
根据this question,可以通过将Lua编译为C ++代码来解决该问题,但是由于我使用的是LuaJIT,所以不确定是否会给我带来任何问题?