基本的にluaスクリプトを実行するだけのc ++プログラムに取り組んでいます。ただし、その lua スクリプトでは、私の c++ プログラムから lua スクリプトにエクスポートされたクラスが構築されます。
私の main() c++ 関数は、いくつかの準備の後に呼び出すだけです...
luabind::call_function<void>(m_L, "main");
今、私のluaスクリプトは次のようになります
local function test()
local c = C()
end
function main()
for i=1,2 do
log(i)
test()
end
end
std::cout << "destructor" << std::endl; を含めました。Cのデストラクタで、いつ呼び出されるかがわかります。lua のガベージ コレクションは、test() の実行が終了するたびに c のデストラクタを呼び出すと予想されます。これは、スコープ外になるためです。代わりに、次の出力が表示されます。
1
2
destructor
destructor
それよりも
1
destructor
2
destructor
これがなぜなのか誰にも分かりますか?ここで何か不足していますか?