창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳
cocos2d-x 2.2.2를 윈도우에서 실행시키고 나서 종료하면
기본으로 4바이트의 메모리 누수가 발생한다.
이건 CCScriptEngineManager가 원인인데
CCObject들은 delete를 실행할 때마다
CCScriptEngineManager의 sharedManager를 호출하기 때문이다.
결국 모든 CCObject가 delete 된 후에 CCScriptEngineManager를 purge해 줘야 하는데,
코드로 이걸 할 수 있는 방법이 없다.
main이 종료되는 순간에 모든 오브젝트들의 delete가 계속 실행되기 때문에
코드로 purge 타이밍을 적을 데가 없다.
해결방법은 CCScriptSupport.cpp에 있는
static CCScriptEngineManager* s_pSharedScriptEngineManager = NULL;
이 static 포인터를 없애버리고
CCScriptEngineManager* CCScriptEngineManager::sharedManager(void)
{
static CCScriptEngineManager s_pSharedScriptEngineManager;
return &s_pSharedScriptEngineManager;
}
void CCScriptEngineManager::purgeSharedManager(void)
{
sharedManager()->removeScriptEngine();
}
sharedManager와 purgeSharedManager를 위와 같이 수정해준다.
사실 이건 굳이 잡아줄 필요없는 누수이다.
계속 4바이트가 상주되어 있다가 프로그램이 종료될 때 생기는 누수이기 때문에
전혀 문제될 것이 없다.
하지만 디버그 창에 메모리 누수 덤프되는 거 보기 싫어서 고쳤다.
불필요한 에러 메시지는 깔끔한 코딩을 방해하기 때문.