C++內存池實現(非線程安全)
#pragma once template<typename T,std::size_t nNum> class CMemPool { public: CMemPool(){ Init();} ~CMemPool() { Fini();} T GetElement(); void ReleaseElement(T t1); void Init(); void Fini(); protected: std::list<T> m_list; }; template<typename T,std::size_t nNum> void CMemPool<T,nNum>::Init() { for (size_t i=0; i<nNum; i++) { T t1 = new T; if (t1 != NULL) { m_list.push_back(t1); } } } template<typename T,std::size_t nNum> void CMemPool<T,nNum>::Fini() { std::list<T>::iterator it = m_list.begin(); for (; it != m_list.end();) { T tTmp = it; it = m_list.erase(it); if (tTmp != NULL) delete tTmp; } } template<typename T,std::size_t nNum> T CMemPool<T,nNum>::GetElement() { if (m_list.size() == 0) Init();std::list<T>::iterator it = m_list.begin(); T t1 = NULL; for(; it != m_list.end();) { if (it == NULL) { it = m_list.erase(it); } else { t1 = it; m_list.erase(it); break; } } return t1; } template<typename T,std::size_t nNum> void CMemPool<T,nNum>::ReleaseElement(T* t1) { if (t1 != NULL) m_list.push_back(t1); }</pre>
本文由用戶 mx3y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!