【发布时间】:2011-04-20 18:00:42
【问题描述】:
我有一个使用 lua 的 C++ 程序。 C++ 将引用计数数据类型公开为带有分配终结器的 userdata,以便 lua 可以获取这些值的所有权。
这很好用。但是有件事让我担心:如果在执行 lua 保存该数据类型实例的脚本时发生错误,那么会调用终结器吗?
问题的另一种表述是:lua 是否会在出错时运行垃圾回收周期?
【问题讨论】:
-
请注意,如果您将 Lua 与 C++ 一起使用,您应该将 Lua 本身编译为 C++ 代码,或者非常小心对象的生命周期。在普通的 C 语言中,Lua 对任何错误(包括 C API 中的错误)执行
longjump(),并产生所有预期的后果。