首页 > 解决方案 > 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。

标签: c++lualuabridge

解决方案


我可以在 Lua 5.2.0 上重现您的问题,但不能在 Lua 5.2.1 或任何更新版本上重现。我的结论是,这只是 Lua 5.2.1 之前版本中的一个错误。只需更新到现代版本的 Lua,您也不应该遇到问题。


推荐阅读