나는 기본적으로 단지 lua 스크립트를 실행하는 C++ 프로그램을 만들고있다. 그 루아 스크립트에서 그러나 클래스는 내 C++ 프로그램에서 루아 스크립트로 내보내졌습니다. 내 주요() C++ 함수를 그냥 준비 후 호출lua - 클래스 소멸자의 늦은 호출
...
luabind::call_function<void>(m_L, "main");
지금 내 루아 스크립트 내가 표준을 포함했다
local function test()
local c = C()
end
function main()
for i=1,2 do
log(i)
test()
end
end
이 :: < < cout을 "처럼 보인다 소멸자 "< < std :: endl; C의 소멸자에서 호출 될 때 알 수 있습니다. 나는 lua의 가비지 콜렉션이 test()가 끝날 때마다 c의 소멸자를 호출 할 것으로 예상한다. 왜냐하면 그것이 범위를 벗어날 때이기 때문이다. 대신에 나는 다음과 같은 출력을 참조하십시오
1
2
destructor
destructor
오히려
이상을1
destructor
2
destructor
사람이 왜 아이디어가 있습니까? 내가 여기서 뭔가를 놓치고 있니? 이 범위를 벗어날 때이기 때문에
흠, 즉 다소 불쾌하다. 이제는이 예제를 명확하게하기 위해 축소했지만 실제 응용 프로그램에서는 C가 거대한 대상 (약 100-1000MB)입니다. 그걸 정리해야 해! 루아에서 기대했던 동작을 얻을 수있는 방법이 있습니까? –
@ chris.schuette : C에서'lua_gc' 또는 루아에서'collectgarbage'가 필요하다면 수동으로 가비지 콜렉터를 호출 할 수 있습니다. – sbk
여러분, 고마워요! –