在luaJIT中使用lua_error会跳过堆栈对象析构函数吗?

时间:2018-08-28 07:58:01

标签: c++ memory-leaks lua destructor luajit

我已经用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,所以不确定是否会给我带来任何问题?

0 个答案:

没有答案