对象池就是一定数量已经创建好的对象的集合。
可以事先创建一批对象,放在一个链表中,以后每当程序要新的对象时,都从对象池中获取,每当程序用完该对象后,都把该对象归还给对象池。这样就少了很多的malloc/free操作,在一定程度上提高了系统的性能,尤其在动态内存分配比较频繁的程序中效果尤其明显。
对象池的特征:
1、对象池中有一定数量创建好的对象。
2、对象池向用户提供获取对象的接口和归还对象的接口。
下面是参考网上的资料写的实现代码:
#include<list>
#include<iostream>
using namespace std;
template<class T>
class ObjectPool
{
list<void *> data_list;
public:
void *malloc_data()
{
if(!data_list.empty())
{
list<void *>::iterator it=data_list.begin();
void *p=*it;
data_list.pop_front();
return p;
}
else
{
void *p=malloc(sizeof(T));
return p;
}
}
void free_data(void *p)
{
data_list.push_back(p);
}
};
class Object{
public:
int value;
Object(int a):value(a){cout<<"Object("<<a<<")called"<<endl;}
~Object(){cout<<"~Object("<<value<<")called"<<endl;}
static ObjectPool<Object> pool_;
void *operator new(size_t size)
{
return pool_.malloc_data();
}
void operator delete(void *p)
{
pool_.free_data(p);
}
};
测试程序:
ObjectPool<Object> Object::pool_;
int _tmain(int argc, _TCHAR* argv[])
{
Object* o1=new Object(1);
Object* o2=new Object(2);
delete o1;
delete o2;
return 0;
}
上述代码,实现了一个简单的对象池,更深入的解释会在后续代码中实现。