C++对象池技术剖析
对象池就是一定数量已经创建好的对象的集合。
可以事先创建一批对象,放在一个链表中,以后每当程序要新的对象时,都从对象池中获取,每当程序用完该对象后,都把该对象归还给对象池。这样就少了很多的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; }
上述代码,实现了一个简单的对象池,更深入的解释会在后续代码中实现。