Lua是一种通用的脚本语言,可以与C++代码无缝交互。通过使用Lua绑定,可以将C++函数和类暴露给Lua脚本。此外,Lua具有一种垃圾回收机制,可自动回收不再使用的内存,这提高了程序的内存管理效率。

我遇到了一个问题。

我有一个 Lua 绑定到一个渲染引擎,该引擎具有一个内部的渲染管理器,它保持自己的指针跟踪渲染场景并管理它们。问题在于,当我从 Lua 中使用它时,如果我没有保留 C++ 渲染管理器中添加的每个对象的 Lua 引用,它就会开始对指针进行垃圾回收,这当然会导致崩溃。我不特别想保存我创建的每个东西的每个引用。有没有一种方法可以强制 Lua 不会回收某些东西?有其他方法可以解决这个问题吗?

我使用 SWIG 生成 Lua 绑定代码。

原文链接 https://stackoverflow.com/questions/1114991

点赞
stackoverflow用户41661
stackoverflow用户41661

一个防止Lua垃圾回收对象的简单方法是将该对象放入表中(称为“uncollectable”),然后将该表放入Lua注册表中。

另一个选择是对每个Lua对象使用一个额外的间接级别,即使用“轻量级用户数据”。轻量级用户数据指向指向C++对象的指针,即使轻量级用户数据被收集,底层对象仍保持不变。

这些解释相当简洁,但我希望借助于Programming in Lua,您可以将其转换成可用的代码。

2009-07-12 02:44:51