【发布时间】:2013-01-25 22:16:07
【问题描述】:
luabind 是否可以检查对导出类(对象)的成员函数调用是否针对有效对象?
假设我有一个使用 luabind 暴露给 lua 的名为 Actor 的类。我从 C++ 调用一个 lua 函数,并以一个 actor 对象作为参数。现在,在函数完成之前,脚本编写会将参与者对象放入全局 lua 引用中,以便稍后访问。
稍后,演员对象从 C++ 站点中删除,另一个函数被调用,试图访问无效的演员对象(其中的任何方法) - 显然,由于它已被删除,它会导致崩溃(访问违规)
样本:
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); 处的错误;
如果没有,是否有其他解决方案如何确保编写脚本的人不会产生这些问题?
【问题讨论】: