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);
    }

Lua 代码

local ii = 0

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

我使用的是 Lua 5.2.0。

解决方法

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