diff --git a/cocos/base/CCAutoreleasePool.cpp b/cocos/base/CCAutoreleasePool.cpp index d5e35a01c4..06bedcd948 100644 --- a/cocos/base/CCAutoreleasePool.cpp +++ b/cocos/base/CCAutoreleasePool.cpp @@ -111,8 +111,7 @@ PoolManager* PoolManager::getInstance() { s_singleInstance = new PoolManager(); // Add the first auto release pool - s_singleInstance->_curReleasePool = new AutoreleasePool("cocos2d autorelease pool"); - s_singleInstance->_releasePoolStack.push_back(s_singleInstance->_curReleasePool); + new AutoreleasePool("cocos2d autorelease pool"); } return s_singleInstance; } @@ -125,6 +124,7 @@ void PoolManager::destroyInstance() PoolManager::PoolManager() { + _releasePoolStack.reserve(10); } PoolManager::~PoolManager() @@ -134,7 +134,6 @@ PoolManager::~PoolManager() while (!_releasePoolStack.empty()) { AutoreleasePool* pool = _releasePoolStack.back(); - _releasePoolStack.pop_back(); delete pool; } @@ -143,7 +142,7 @@ PoolManager::~PoolManager() AutoreleasePool* PoolManager::getCurrentPool() const { - return _curReleasePool; + return _releasePoolStack.back(); } bool PoolManager::isObjectInPools(Ref* obj) const @@ -159,21 +158,12 @@ bool PoolManager::isObjectInPools(Ref* obj) const void PoolManager::push(AutoreleasePool *pool) { _releasePoolStack.push_back(pool); - _curReleasePool = pool; } void PoolManager::pop() { - // Can not pop the pool that created by engine - CC_ASSERT(_releasePoolStack.size() >= 1); - + CC_ASSERT(!_releasePoolStack.empty()); _releasePoolStack.pop_back(); - - // Should update _curReleasePool if a temple pool is released - if (_releasePoolStack.size() > 1) - { - _curReleasePool = _releasePoolStack.back(); - } } NS_CC_END diff --git a/cocos/base/CCAutoreleasePool.h b/cocos/base/CCAutoreleasePool.h index 8ceaa5c879..6d1134a77e 100644 --- a/cocos/base/CCAutoreleasePool.h +++ b/cocos/base/CCAutoreleasePool.h @@ -163,8 +163,7 @@ private: static PoolManager* s_singleInstance; - std::deque _releasePoolStack; - AutoreleasePool *_curReleasePool; + std::vector _releasePoolStack; }; // end of base_nodes group diff --git a/tests/cpp-tests/Classes/ReleasePoolTest/ReleasePoolTest.cpp b/tests/cpp-tests/Classes/ReleasePoolTest/ReleasePoolTest.cpp index 14e9b8dc6a..70e54dbc49 100644 --- a/tests/cpp-tests/Classes/ReleasePoolTest/ReleasePoolTest.cpp +++ b/tests/cpp-tests/Classes/ReleasePoolTest/ReleasePoolTest.cpp @@ -75,6 +75,11 @@ void ReleasePoolTestScene::runThisTest() } // object in pool2 should be released + + { + new AutoreleasePool; + PoolManager::destroyInstance(); + } Director::getInstance()->replaceScene(this); }