首页 > 解决方案 > 将 lua_error 与 LuaJIT 一起使用会跳过堆栈对象析构函数吗?

问题描述

根据 LuaJIT 官方网站,我已经用 MSVC x64 编译了 LuaJIT,这意味着应该有完整的 C++ 异常互操作性。

其中一点指出“跨 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,我不确定这是否不会给我带来任何问题?

标签: c++memory-leaksluadestructorluajit

解决方案


推荐阅读