我目前正在一个游戏项目中,并且必须将Lua整合到游戏引擎中,以将游戏对象和组件的界面暴露给脚本用户。Lua C++类绑定垃圾收集关
我试图研究如何将C++类对象绑定到Lua,并且我发现大多数文档解释了如何使用userdata类型来完成它。然而,我们的项目自己管理游戏对象(这意味着我们决定何时删除,创建游戏对象),我不知道是否可以禁用Lua的垃圾回收。具体来说,我可以尝试用metatable替换__gc
为零还是不起作用的函数?
我的补偿是使用包含lightuserdata(this指针)的表和静态函数来检索“this指针”并手动调用成员函数。但是,由于程序员应该手动进行封装静态功能,因此很快就会变得很脏并且很难管理。
我可以获得一些链接,以获得正确使用的良好文档或针对类似问题的解决方案吗?
谢谢你的回应。 然而,我并没有完全明白让lua userdata成为普通指针。 1.与此有什么特别的区别和使用lightuserdata? 2.它如何有益? – user2883715
@ user2883715 userdata和light userdata之间的一个主要区别是,只有userdata对象具有每个对象元表;这是因为轻量级用户数据基本上就像一个数字,只有'void *'而不是'double'(或者任何您配置为数字数据类型的数据)。这就是为什么当你需要每个对象的元表时,你需要使用userdata而不是light userdata。然后你应用另一级间接寻常的原则 - 如果你想用指针或智能指针的userdata,那就是你坚持的原则...... –