cocos文档里推荐的退出方法是调用Director::getInstance()->end();
这个调用发生后退出的逻辑大概是:
1. Director内部标志_purgeDirectorInNextLoop置位
2. 下一个DisplayLinkDirector::mainloop()里调用purgeDirector()释放关闭一切
可是在Application::run()里的代码是这样的:
......
director->mainloop(); //释放一切,包括director instance
glview->pollEvent(); //处理事件
......
如果在这个瞬间有鼠标移动消息产生(虽然是小概率事件,如果是灵敏度高的鼠标还是比较容易发生的)
在pollEvent()调用里会重新初始化Director并最终导致内存泄漏!!!
如果上述两个函数调用的顺序上下颠倒一下,似乎问题就解决了。
或者增加程序退出的全局标志以及相应的判断逻辑,以避免类似的问题发生。