Lua C++类绑定垃圾回收关闭
Lua C++ class binding garbage collection off
我目前正在一个游戏项目中,必须将Lua集成到游戏引擎中,以向脚本用户公开游戏对象和组件的接口。
我试图研究将类对象绑定到Lua的方法C++我发现大多数文档都解释了如何使用userdata类型来做到这一点。
然而,我们的项目自己管理游戏对象(这意味着我们决定何时删除、创建游戏对象),我想知道我是否可以禁用 Lua 的垃圾回收。具体来说,我可以尝试将元表中的__gc
替换为 nil 或不执行任何操作的函数吗?
我的补偿是使用包含lightuserdata(this指针)和静态函数的表,该函数检索"this指针"并手动调用成员函数。但是,由于程序员应该手动使包装器静态函数,因此很快就会很脏且难以管理。
我可以获得一些指向正确使用或类似问题解决方案的良好文档的链接吗?
如果您的游戏对象由游戏引擎管理,只需让您的 Lua 用户数据对象成为指向游戏对象的普通指针,这样 Lua 的 GC 将只收集它们,而不是实际对象。
如果您希望对象的生存期由Lua和C++同时管理,则可以对对象使用std::shared_ptr
,并让Lua用户数据也保存这样一个智能指针,这样两个世界都可以在同一个引用计数器上运行,即使在Lua管理的指针的情况下发生了一些额外的"东西"。
LuaBridge 文档同时描述了如何解决您的问题,并提供了一个开箱即用的解决方案 - LuaBridge。你不需要自己滚动。您还可以考虑其他几个绑定库。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 运行时错误:引用绑定到类型为"int"的空指针
- 有没有办法将重载的类函数绑定到函数对象?
- 替换 C++17 中移除的绑定 1st