简单的内存池实现(非线程安全)
来源:互联网 发布:成都锐理数据 编辑:程序博客网 时间:2024/06/08 03:11
#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);
}
- 简单的内存池实现(非线程安全)
- linux下的一个简单线程安全内存池实现
- 简单单体模板类的实现(非线程安全)
- 【RLIB】线程安全内存池(Memory) 的简易C++实现
- 线程安全的内存池 c++ 实现尝试(一)
- 线程安全非线程安全的区别
- HashMap的简单实现,具有线程安全
- 计数 i++,++i 简单的线程安全与线程非安全的代码对比
- 实现一个线程安全的内存池(使用线程私有数据机制TSD来实现)
- 非线程安全的函数
- ConcurrentHashMap 非绝对线程安全简单举例
- UIimage的缩放线程实现安全和非线程安全操作
- 实现一个线程安全和非线程安全的程序计数器
- 线程安全内存池
- 非线程安全对象池
- 非线程/线程安全
- 线程安全、非线程安全
- 非线程安全的HashMap 和 线程安全的ConcurrentHashMap
- OnCreate()与PreCreateWindow()
- Oracle的import和export的版本规则
- 使用MeTriX MuX 1.1
- X文件格式
- linux与windows双系统如何修改默认启动方式
- 简单的内存池实现(非线程安全)
- 推荐系统:Slope One 算法
- 如何设置Eclipse中的每一行容纳的代码数
- c语言中realloc()函数解析
- Android入门(7)第一个应用-GTD
- va_start用法
- vs 中大括号之间垂直虚线显示
- IE和FF兼容性问题汇总(JS)
- algebraicSumOfPrime