내 테스트 코드는 다음과 같습니다.
mt={}
myt={}
setmetatable(myt, mt)
mt.__gc=function()print("hello gc")end
myt=nil
collectgarbage()
하지만이 코드를 실행하면 메시지가 인쇄되지 않습니다.
그래서 내 코드에 뭔가 잘못된 것이 있다고 생각합니다.
최신 정보:
mt.__gc=function()print("hello gc")end
setmetatable(myt, mt)
__gc
전에 필드를 설정 setmetatable
하면 질문이 해결 되지만 ( 온라인 인터프리터 사용 ) 프로그램에서 C API 를 통해 동일한 코드를 실행하면 다시 죽습니다.luaL_dofile
__gc
그리고 독립형 lua 인터 프리트 (lua 5.1.5)에서도 테스트했는데 '__gcc'도 죽었습니다.
유일하게 작동하는 좋은 경우는 버전이 5.3 인 온라인 인터프리터 입니다.
따라서 5.1 버전에서 작동하도록 '__gc'를 어떻게 얻을 수 있는지 물어봐야 할 것 같습니다.
를 호출 하기 전에__gc
필드 를 설정해야합니다 .setmetatable
매뉴얼은 말한다 :
__gc
필드 없이 메타 테이블을 설정 하고 나중에 메타 테이블에서 해당 필드를 생성하면 객체가 종료 표시되지 않습니다.
테이블에 대한 GC 방법은 Lua 5.2에서 도입되었습니다. Lua 5.1에서는 작동하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다