luabind 什么时候释放已创建的对象?
2011-1-16 0:3:17
收藏:0
阅读:140
评论:2
我在使用 luabind 时遇到了问题。我定义了一个 std::map 以分配在 lua 中创建的对象。我将该地图作为全局对象发布到 lua 中,如下所示:
luabind::globals(L)["g_SceneManager2D"] = this;
之后,该对象被用于一个 lua 函数中,该函数创建并将许多对象插入到该地图中。问题出现在 lua 函数结束并且 luabind 返回控制权给 C++ 程序的时候,因为自动丢失了地图的所有内容。
我一直在寻找错误。我保持了 lua 上下文的存在,因此该对象必须存在。
你能帮我吗?
非常感谢 :)
原文链接 https://stackoverflow.com/questions/4702906
点赞
stackoverflow用户263356
如果我正确理解您的问题,似乎是您在 Lua 中创建了对象,然后将其插入到地图中(无论是通过 Lua 还是 C++),随后便失去了它们。没有更多的代码,很难确定问题所在。然而,我会首先确认这些对象确实被创建了(再次核对)。接下来我会检查 Lua 是否对它们进行了垃圾回收。如果确实是 Lua 进行了垃圾回收,那么您将看不到它们在 C++ 端的存在,因为它们已经消失了。
如果有帮助的话,我正在完成一个类似的项目。我必须从 Lua 中创建和获取 C++ 对象,但是我并没有在 Lua 中创建这些对象,而是通过调用 C++ 函数来完成创建,并在 Lua 调用中发送任何必要的数据 (受 Luabind 约束)。这些 C++ 函数通过 ID 将对象索引到哈希表中,并将 ID 返回给 Lua,在需要在脚本侧检索对象进行操作时使用。这个设置使正确处理内存问题更加容易(和安全),并防止 Lua 对您的对象进行垃圾回收。
2011-01-17 11:28:05
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我建议使用
shared_ptr<>(this)
而不是原始的this
。boost::shared_from_this
可能会有所帮助。确保你的类也使用 Luabind 注册,并且指定class_
为shared_ptr
持有。另一个有趣的想法可能是将你的 Lua 函数仅作为一个 Lua 表来生成 "map",将其返回,然后在 C++ 中迭代该表以构建你的
std::map
。