问题描述
我正准备在我的项目中加入 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 的现代版本,您也不应该遇到问题。