私がこのようなクラスを持っているとしましょう:
class A
{
public:
A(){}
~A(){}
};
そして、次のようにLuabindを介してLuaに公開します。
module(luaState)
[
class_<A>("Foo")
.def(constructor<>())
];
そして最後に、次のようなスクリプトでインスタンス化します。
A = Foo();
その時点でのAの実際の「存在状態」は何ですか?
それはヒープのどこかにあり、luaはそれへの参照をどこかに保持していますか?(またはluabind :: object?)
newまたは同等のものによって割り当てられたように、それはポインタにしかなり得ないような気がします。
ただし、参照を受け入れる関数をluaにバインドすることはできます。たとえば、最終的に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();
これまでに理解したロジックでは、luabindのこのような割り当てがバインドされたコンストラクターで行うのと同じでない限り、私が新しいオブジェクトを割り当てるため、この場合はクリーンアップを行う必要があります。
要するに、私はオブジェクトの存続期間などについて本当に混乱しています...これに関連するキーワードをグーグルで検索しましたが、 http: //www.gamedev.net/topic/525692-luabindのようなものしか取得していません-所有権と破壊/
それは私が知りたいことではありません。割り当て、インスタンス化、ライフタイムなど、舞台裏で物事がどのように処理されるかを具体的に理解したいと思います。