【问题标题】:Lua bindings to C++ and garbage collectionLua 绑定到 C++ 和垃圾收集
【发布时间】:2010-11-10 01:01:02
【问题描述】:

好的,我遇到了一个问题。

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

我正在使用 SWIG 生成 Lua 绑定。

【问题讨论】:

    标签: c++ scripting binding lua swig


    【解决方案1】:

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

    您的另一个选择是对每个 Lua 对象使用额外的间接级别,即使用“轻量级用户数据”。轻量级用户数据指向一个指向 C++ 对象的指针,即使收集了轻量级用户数据,底层对象仍然毫发无损。

    这些解释非常简洁,但我希望在Programming in Lua 的帮助下,您可以将其中的一个变成工作代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2013-04-01
      • 2015-11-26
      相关资源
      最近更新 更多