LuaのユーザデータGC
-
27-09-2019 - |
質問
これはLuaのオブジェクトへの保留リファレンスにLuaのユーザデータの一部は可能ですか? (テーブル、又はユーザーデータの別の部分、気に入りましたか?)。基本的に、私が知りたいことはあります:
私は、GCの実行は、ユーザデータが言うことができるようにtahtにユーザデータの一部を作成することができます:「!。ねえ、私はこれらの他のオブジェクトへの参照を保持しています、同様にそれらをマーク」
EDIT:LHFに応えます:
私が持っていると仮定します:
struct Vertex {
double x, y, z;
}
struct Quaternion {
double w, x, y, z;
}
さて、私が行うことができます:
struct Foo {
Vertex v;
Quaternion q;
}
が、代わりに私がしたいとします:
struct Bar {
Vertex *v;
Quaternion *q;
}
[すなわち。バーテックス&クォータニオンは、ユーザデータ]の本当に大きな枚あるとします。
その後、私の必要性 -さて、私はユーザデータの頂点を取りLuaのユーザー機能、およびユーザデータクォータニオンを持っており、ユーザデータバーを(私はスペースを節約したいので、私は、ユーザデータはFooを望んでいない)を作成したとし何とかユーザデータのための頂点* /クォータニオン* GC-EDではないと。
解決
Luaのオブジェクトへの保留リファレンスへのluaユーザデータの一部のためにそれは可能ですか?
の番号のユーザーデータは、別のLUAオブジェクトへのポインタを保持することはできません。あなたが生きている別のLuaのオブジェクトを保持するためにユーザデータを使用したい場合は、 に弱いテーブルを使用してそれをしなければなりません。それをを行う方法についてセクションとしてロベルトの著書ます。
他のヒント
しばらくして。私は、参照されたデータは、Luaのマシンによって作成された場合、それは自分自身にそれをクリーンアップすると思います。そうしないと、あなたのCコードでGCコールバックを待って、メモリを自分で解放する必要があります。