如果对导出的类(对象)的成员函数调用是针对有效对象的,luabind 是否有可能进行检查?
假设我有一个使用 luabind 暴露给 lua 的名为 Actor 的类。我从 C++ 调用一个 lua 函数,并以一个 actor 对象作为参数。现在在函数完成之前,脚本编写会将actor对象放在全局lua引用中,以便稍后访问。
稍后,从 C++ 站点中删除了 actor 对象,调用了另一个函数来尝试访问无效的 actor 对象(其中的任何方法) - 显然,由于它已被删除,它会导致崩溃(访问冲突)
样本:
local myObjRef = nil
function doSomethingWithActor(actor)
-- save, still valid object
actor:Say("hello")
myObjRef = actor
end
function calledAfterActorWasDeleted()
--- will crash if the c++ object has been deleted meanwhile, works fine if it still exists
myObjRef:Say("Crash...")
end
NIL 检查在这里没有帮助,这可以在 luabinds 网站上检查吗?这些函数使用 lua_pcall(....) 执行,堆栈跟踪显示 luabinds call.hpp results = maybe_yield(L, lua_gettop(L) - arguments, (Policies*)0) 处的错误;
如果没有,是否有另一种解决方案来确保编写脚本的人无法创建这些问题?