对象池对于创建开销比较大的对象来说很有意义,为了避免重复创建开销比较大的对象,我们可以通过对象池来优化。对象池的思路比较简单,事先创建好一批对象,放到一个集合中,以后每当程序需要新的对象时候,都从对象池里获取,每当程序用完该对象后,都把该对象归还给对象池。这样会避免重复的对象创建,提高程序性能。先来看看对象池的简单实现:
#include <list> template<typename Object> class ObjectPool { public: ObjectPool(size_t unSize) : m_unSize(unSize) { for (size_t unIdx = 0; unIdx < m_unSize; ++ unIdx) { m_oPool.push_back(new Object()); } } ~ObjectPool() { typename std::list<Object *>::iterator oIt = m_oPool.begin(); while (oIt != m_oPool.end()) { delete (*oIt); ++ oIt; } m_unSize = 0; } Object * GetObject() { Object * pObj = NULL; if (0 == m_unSize) { pObj = new Object(); } else { pObj = m_oPool.front(); m_oPool.pop_front(); -- m_unSize; } return pObj; } void ReturnObject(Object * pObj) { m_oPool.push_back(pObj); ++ m_unSize; } private: size_t m_unSize; std::list<object *> m_oPool; };