我遇到了luabind的问题。我定义了一个std :: map来分配在lua中创建的对象。我以这种方式在lua中将此地图发布为全局对象:
luabind::globals(L)["g_SceneManager2D"] = this;
之后,该对象被用于lua中的函数,其中创建了许多对象并将其插入到此映射中。当lua函数结束并且luabind将控件返回到C ++端程序时,问题就出现了,因为地图的所有内容都会自动丢失。
我在寻找错误。我保持lua上下文活着,所以这个对象必须存在。
你能帮忙吗?非常感谢:)
答案 0 :(得分:1)
我建议使用shared_ptr<>(this)
而不是原始this
。 boost::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垃圾收集你的对象。