gpt4 book ai didi

c++ - 关闭 Lua C++ 类绑定(bind)垃圾回收

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:17 26 4
gpt4 key购买 nike

我目前在一个游戏项目中,必须将 Lua 集成到游戏引擎中,以向脚本用户公开游戏对象和组件的接口(interface)。

我尝试研究将 C++ 类对象绑定(bind)到 Lua 的方法,我发现大多数文档都解释了如何使用 userdata 类型进行绑定(bind)。

然而,我们的项目自己管理游戏对象(这意味着我们决定何时删除、创建游戏对象),我想知道我是否可以禁用 Lua 的垃圾收集。具体来说,我可以尝试将元表中的 __gc 替换为 nil 或什么都不做的函数吗?

我的补偿是使用包含 lightuserdata(this 指针)的表和检索“this 指针”并手动调用成员函数的静态函数。然而,由于程序员应该手动使包装器静态函数,它很快就会变脏并且难以管理。

我能否获得一些正确使用的良好文档或您对类似问题的解决方案的链接?

最佳答案

如果您的游戏对象由您的游戏引擎管理,只需让您的 Lua userdata 对象成为指向您的游戏对象的普通指针,这样 Lua 的 GC 将只收集它们,而不是实际的对象。

如果你希望你的对象的生命周期由 Lua 和 C++ 管理,你可以例如对你的对象使用 std::shared_ptrs,并且让 Lua 用户数据也保存这样一个智能指针,这样两个世界都在同一个引用计数器上运行,即使在 Lua 管理的指针的情况下有一些额外的“东西”。

关于c++ - 关闭 Lua C++ 类绑定(bind)垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19388427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com