私は基本的にはluaスクリプトを実行するC++プログラムに取り組んでいます。そのluaスクリプトでは、しかし、私のC++プログラムからluaスクリプトにエクスポートされたクラスが構築されます。私の主な()C++関数は、単にいくつかの準備の後に呼び出すlua - クラスデストラクタの遅い呼び出し
...
luabind::call_function<void>(m_L, "main");
は今私のluaスクリプトは、私は、STDが含まれている
local function test()
local c = C()
end
function main()
for i=1,2 do
log(i)
test()
end
end
この:: < <裁判所未満 "のように見えますデストラクタ "< < std :: endl; Cのデストラクタでそれが呼び出されるときを知っています。私はluaのガーベジコレクションが、test()が終了するたびにcのデストラクタを呼び出すことを期待しています。なぜなら、それはスコープから外れるからです。代わりに、私は次の出力を参照してください。
1
2
destructor
destructor
ではなく
1
destructor
2
destructor
を誰もがこれである理由のアイデアを持っていますか?私はここに何かを逃していますか
うーん、それはかなり不快です。今、わかりやすくするためにこの例を減らしましたが、私の実際のアプリケーションでは、cは巨大なオブジェクト(約100-1000 MB)です。それはきれいにする必要があります!私の予想される行動をルアから得る方法はありますか? –
@ chris.schuette:Cで 'lua_gc'、またはLuaで' collectgarbage'が本当に必要な場合は、手動でガベージコレクタを呼び出すことができます – sbk
すごくありがとう! –