在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
对象池就是一定数量已经创建好的对象的集合。 可以事先创建一批对象,放在一个链表中,以后每当程序要新的对象时,都从对象池中获取,每当程序用完该对象后,都把该对象归还给对象池。这样就少了很多的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; } 上述代码,实现了一个简单的对象池,更深入的解释会在后续代码中实现。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论