3

オブジェクトに問題があり、もう必要ありませんが、まだ参照があります。結果: オブジェクトが収集されていないため、割り当てられたメモリのサイズが常に増加しています。

この種の問題を解決するにはどうすればよいですか?参照が 1 つしかないオブジェクト、またはライフタイムが特定の値よりも長いオブジェクトを見つける方法はありますか? または別の解決策はありますか?

Lua 5.1 と C++ を luabind で使用する。

ありがとう。

4

2 に答える 2

5

誰かがここで言及しているように、弱いテーブルを使用してみることができます。

次のようなコードがある場合:

myListOfObjects = {}
...
table.insert(myListOfObject, anObject)

その後、使用が停止すると、まだ参照anObjectされているため、割り当てが解除されることはありません。myListOfObjects

参照を削除してみてください(参照を nil に設定します) が、より簡単な解決策は弱いテーブルとしてmyListOfObjects宣言することです:myListOfObjects

myListOfObjects = {}
setmetatable(myListOfObjects, { __mode = 'v' }) --myListOfObjects is now weak

が変更するテーブルへの参照を返すことを考えるとsetmetatable、次の短いイディオムを使用できます。これは、前の 2 行と同じことを行います。

myListOfObjects = setmetatable({}, {__mode = 'v' }) --creation of a weak table
于 2009-12-18T15:10:17.333 に答える
1

C++ との統合については確信が持てませんが、ガベージ コレクターを実行する機会が与えられていないようです。

lua で明示的に呼び出してみて、それが役立つかどうかを確認できます。コア apis に機能がありますcollectgarbage(opt [, arg])

于 2009-12-17T15:16:34.637 に答える