什么时候luabind免费创建对象?

时间:2011-01-16 00:03:17

标签: c++ lua luabind

我遇到了luabind的问题。我定义了一个std :: map来分配在lua中创建的对象。我以这种方式在lua中将此地图发布为全局对象:

luabind::globals(L)["g_SceneManager2D"] = this;

之后,该对象被用于lua中的函数,其中创建了许多对象并将其插入到此映射中。当lua函数结束并且luabind将控件返回到C ++端程序时,问题就出现了,因为地图的所有内容都会自动丢失。

我在寻找错误。我保持lua上下文活着,所以这个对象必须存在。

你能帮忙吗?

非常感谢:)

2 个答案:

答案 0 :(得分:1)

我建议使用shared_ptr<>(this)而不是原始thisboost::shared_from_this可能有所帮助。确保您的班级也使用Luabind注册,class_被指定为shared_ptr

另一个有趣的想法可能是让你的Lua函数只是生成“map”作为Lua表,返回它,你可以用C ++迭代它来构建你的std::map

答案 1 :(得分:1)

如果我正确理解你的问题,你似乎在Lua中创建对象,然后将其插入到地图中(通过Lua或C ++)然后丢失。如果没有更多的代码,很难确切地说出问题所在。但是,我首先要确保确实正在创建这些对象(仔细检查它),然后我会检查Lua是不是垃圾收集它们。如果Lua确实是垃圾收集那些对象,那么你就不会在C ++方面看到它们,因为它们已经消失了。

如果有帮助,我正在完成一个类似的项目。我不得不从Lua创建和检索C ++对象,但是我没有在Lua中创建对象,而是调用C ++函数为我做这件事,在Lua调用中发送任何必要的数据(由Luabind绑定)。那些(C ++)函数通过ID将对象索引到哈希表中,并且如果需要为操作检索对象脚本端,则将ID返回给Lua。这种设置可以更容易(更安全)正确处理内存,并防止Lua垃圾收集你的对象。