C++ 简单对象池实现
一、前言
C++智能指针,这次该是大家经常听说的对象池了;
什么是对象池
所谓对象池就是有很多对象的池子,其实也就是开始创建大量的对象放在一个池子里面;这不免让我想起了后宫佳丽三千人呀!我们可以将后宫比作一个池子,这三千佳丽就是三千个对象,这三千佳丽住在后宫,也就是在对象池中有三千个对象;
对象池的作用
我们还用着后宫佳丽三千人来做比较;
第一种情况:皇帝需要一个妃子就让侍卫和大臣去纳妃,这一次就可能要好久,这些侍卫和大臣不免要面临砍头抄家的风险呀!关键每次皇帝每次纳妃之后,就把妃子逐出了皇宫,这样每次纳妃再逐出去,皇帝心累,侍卫和大臣每次也是在墙角瑟瑟发抖呀!
**第二种情况:**这种情况就好很多了,侍卫和大臣一次性就为皇帝纳了3000人并且入住后宫,皇帝需要妃子的时候,从后宫抓一个出来,不需要在放进去,这样,侍卫和大臣没有了砍头的风险,皇帝也很愉快,效率变高了好多;
通过上面两种说法,我们会发现,采用对象池的方式,会使对象在申请和释放时更加的高效和方便;
二、对象池实现思路
采用链表的方式:
获取对象
为了防止冲突,每次我们获取对象的时候,我们会从链表的头进行获取,然后将头删除
回收对象
与获取对象相同,回收对象时,将对象加入到对象池的尾部,这样就不会和获取对象有所冲突;
这次是做的简单的对象池,其实有很多缺陷:
对象池中没有对象时,应该另外申请对象,释放对象的时候,应该区分直接释放和回收内存池,可参考C++内存池设计与实现;
三、对象池实现测试代码
#ifndef _OBJECTPOOL_HPP_
#include <iostream>
template<class Object>
Object* GetObject()
void ReturnObject(Object* pObj)
private: #endif // !_OBJECTPOOL_HPP_
对象池测试代码
#include "ObjectPool.hpp" using namespace std;
class Test
int main()
return 0; |
有话要说