加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读