エクスポートされたクラス (オブジェクト) へのメンバー関数呼び出しが有効なオブジェクトに対するものであるかどうかを luabind がチェックすることは可能ですか?
luabind を使用して lua に公開された Actor というクラスがあるとします。アクター オブジェクトをパラメータとして C++ から lua 関数を呼び出しています。関数が終了する前に、スクリプトの書き込みによってアクター オブジェクトがグローバル 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); でエラーを示します。
そうでない場合、スクリプトを書いている人がこれらの問題を作成できないようにする別の解決策はありますか?