C++ 调用 Lua 函数

我计划在我的项目中加入 Lua,但遇到一个问题:如果链接我的自定义类并在 Lua 中创建它,则堆栈不会清理,导致内存泄漏。内存不断增加。

我的类:

class CTest
{
public:
    CTest(std::string s)
        : m_s(s)
    {
        std::cout << s << std::endl;
    }

    ~CTest()
    {

    }

private:
    std::string m_s;
};

C++ 测试代码:

    auto state = luaL_newstate();
    luaL_openlibs(state);

    luabridge::getGlobalNamespace(state)
        .beginClass<CTest>("Test")
            .addConstructor<void(*)(std::string)>()
        .endClass();

    int iState = luaL_dofile(state, "Test.lua");

    while (true)
    {
        int nStatus = 0;

        lua_getglobal(state, "test");
        nStatus = lua_pcall(state, 0,0,0);
    }

Lua 代码:

local ii = 0

function test()
    local i = Test("Hallo " .. ii)
    ii = ii + 1
end

我正在使用 Lua 5.2.0。

点赞
用户7509065
用户7509065

我能在 Lua 5.2.0 上重现你的问题,但是在 Lua 5.2.1 或者之后的版本上却不会出现。我的结论是这只是在 5.2.1 版本之前的 Lua 中的一个 bug。只需要更新到一个现代版的 Lua 就不应该再遇到这个问题了。

2021-01-10 22:18:58