2

Luaユーザーデータの一部がLuaオブジェクトへの参照を保持することは可能ですか? (テーブル、または別のユーザーデータのようなものですか?)。基本的に、私が知りたいことは次のとおりです。

gc が実行されたときに、ユーザー データが次のように言うことができるような方法でユーザー データを作成できますか。

編集: 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;
}

[つまり、Vertex と Quaternion がユーザーデータの非常に大きな部分であると仮定します]。

ここで、ユーザーデータ Vertex とユーザーデータ Quaternion を受け取り、ユーザーデータ Bar を作成する Lua ユーザー関数があるとします (スペースを節約したいので、ユーザーデータ Foo は必要ありません)。 userdata Vertex*/Quaternion* は GC 処理されません。

4

2 に答える 2

4

lua ユーザーデータの一部が lua オブジェクトへの参照を保持することは可能ですか?

いいえ。ユーザーデータは、別の Lua オブジェクトへのポインターを保持できません。userdata を使用して別の Lua オブジェクトを存続させたい場合は、weak tablesを使用して行う必要があります。それを行う方法に関するセクションとしてのロベルトの本。

于 2010-06-14T00:30:12.667 に答える
0

luaで何でもしてからしばらく経ちました。参照されているデータがluaマシンによって作成された場合、それ自体がクリーンアップされると思います。それ以外の場合は、Cコードでgcコールバックを待機し、自分でメモリを解放する必要があります。

于 2010-06-13T23:20:35.040 に答える