2011-08-14 9 views
5

だが、私はこのようなクラスがあるとしましょうインスタンス化する方法を理解する助けが必要このような:はluabindは、クラス

A = Foo(); 

その時点での実際の「存在の状態は何ですか?

ヒープのどこかにありますか?ルアはどこかの参照を保持していますか? (またはluabind :: object?)

私は、それが新しいものか同等のものによって割り当てられたように、ポインタにしか使えないと感じています。

しかし、lua_doSomething(A & a)のような参照を受け入れる関数をバインドすることができ、実際に参照することになります。 私はこれがちょうどa*aとして渡すルアビンンドかもしれないことを知っていますが、それがどうなるかは分かりません。

私がこれを求めている理由は、スクリプトでインスタンス化されたオブジェクトの寿命を少し良くすることを理解し予測することです。

こと、および所有権または寿命があれば変更した場合、私が代わりに上記のようなLUAするクラスを露出させる、私はこのようにそれを行う、不確かさ:

A * lua_CreateA() 
{ 
return new A(); 
} 

module(luaState) 
    [ 
     class_<A>("Foo") 
    ]; 


module(luaState) 
    [ 

    def("createA",&lua_CreateA) 

    ]; 

そして

A = createA(); 
のようにそれを使用して

私が今まで理解しているロジックでは、このようなルアバインドの割り当てがバインドされたコンストラクタを使用した場合と同じでなければ、私は新しいオブジェクトを割り当てるため、このケースではクリーンアップを実行する必要があります。要するに

、私は...ここ オブジェクトの有効期間とスタッフについて本当に困惑している私は、これに関連するキーワードをGoogleで検索、しかし、私だけではありません http://www.gamedev.net/topic/525692-luabind-ownership-and-destruction/

のようなものを取得しています本当に私が知りたいもの。 割り当て、インスタンス化、存続期間、およびそのすべてについて、シーンの裏でどのように処理されるかを具体的な方法で理解したいと思います。

答えて

5

Luabindではオブジェクトの寿命が非常に簡単です。 Luabindが内部的にそれを得るために何をしているのかについての細部の詳細を理解する必要はありません。

ルアは、作成されたオブジェクトを所有していますによってルアは直接。そのため、Luaにコンストラクタ構文を持つオブジェクトを割り当てると、そのオブジェクトはLuaによって所有されます。オブジェクトがLuaで参照されなくなったら、Lua GCはそれを収集します。

Luuaが他の方法でオブジェクトへの参照を取得した場合、Luabindの採用ポリシーを使用して所有権を移譲しない限り、Luaはではありません。はそのオブジェクトを所有します。したがって、Luaにオブジェクトを返す関数をバインドする場合、そのオブジェクトが生存しているかどうかをLuaが判断すると期待している場合は、採用ポリシーを使用する必要があります。

最後の段落は、実際の参照(ポインタと参照型を返す)にのみ適用されます。 Luaにオブジェクトのコピーが与えられている場合(非参照またはポインタの戻り値を介して)、Luaはそのオブジェクトのコピーを所有します。