C++内存池实现(非线程安全)
发布时间:2020-12-16 07:44:16 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #pragma oncetemplatetypename T,std::size_t nNumclass CMemPool{public: CMemPool(){ Init();} ~CMemPool() { Fini();} T* GetElement(); void Rele
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #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,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,nNum>::ReleaseElement(T* t1) { if (t1 != NULL) m_list.push_back(t1); } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |