c++ - 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。
解决方案
我可以在 Lua 5.2.0 上重现您的问题,但不能在 Lua 5.2.1 或任何更新版本上重现。我的结论是,这只是 Lua 5.2.1 之前版本中的一个错误。只需更新到现代版本的 Lua,您也不应该遇到问题。
推荐阅读
- php - 带有 where 子句和自定义 var 的 Codeigniter db 更新不起作用
- python - 通过循环向 Bokeh 中的折线图添加悬停工具提示
- c# - 如何将一个列表(包含代码)查询到另一个包含代码和描述的列表
- mysql - 使用 NOT IN () 的意外结果
- php - 如何使用 RESTFul API 在 Laravel 中管理无状态?
- typescript - 如何在 Typescript 转译中使用导入和导出?
- php - 如何使用 codeigniter 3 和 jquery 1.12.4 修复我的函数中的错误
- python - 如何从当前字典返回具有列表值的新字典?
- jira-rest-api - 需要使用 Jira python 获取问题链接类型
- java - Android 中的并发