6

わかりました、これが私が抱えている問題です。

レンダリングシーンへのポインターの独自の追跡を維持し、それらを管理する内部レンダリングマネージャーを備えたレンダリングエンジンへのLuaバインディングがあります。問題は、Luaから使用しているときに、C ++レンダーマネージャーに追加するすべてのオブジェクトへのLua参照を保持しないと、ポインターのガベージコレクションが開始され、もちろんクラッシュが発生することです。私が作成するすべてのものへのすべての参照を保存する必要は特にありません。Luaに特定のものをガベージコレクションしないように強制する方法はありますか?この問題を回避する他の方法はありますか?

SWIGでLuaバインディングを生成しています。

4

1 に答える 1

9

Lua がオブジェクトをガベージ コレクションしないようにする簡単な方法は、そのオブジェクトをテーブルにuncollectable入れ (それを と呼びます)、そのテーブルを Lua レジストリに入れることです。

もう 1 つのオプションは、すべての Lua オブジェクトで余分なレベルの間接化を使用することです。つまり、「ライト ユーザーデータ」を使用します。ライト ユーザーデータは C++ オブジェクトへのポインターを指しており、ライト ユーザーデータが収集されても、基になるオブジェクトは無傷のままです。

これらの説明は非常に簡潔ですが、 Programming in Luaの助けを借りて、これを実際のコードに変換できることを願っています。

于 2009-07-12T02:44:51.020 に答える