您的位置:首页 > 编程语言 > C语言/C++

C++实现简单的对象池

2015-07-18 16:12 477 查看
对象池的实现其实是非常简单的

思想也是很简单的:

用一个队列来存放所有的对象,需要时get一个对象,从队列头取一个对象,当用完后,重新将该对象投入到队列尾部。

#ifndef OBJ_POOL_H_
#define OBJ_POOL_H_

#include <queue>
#include <memory>
#include <stdexcept>

using std::queue;
using std::shared_ptr;

template <typename T>
class ObjPool{

public:
ObjPool(int size=defaultSize) throw(std::invalid_argument,std::bad_alloc){
if(0==size){
throw std::invalid_argument("size can't not small than zero");
}

mSize=size;
allocateChunk();

}

shared_ptr<T> getObj(){
if(freeList.empty()){
allocateChunk();
}

auto obj=freeList.front();
freeList.pop();
return obj;
}

void releaseObj(shared_ptr<T> obj){
freeList.push(obj);
}

protected:

queue<shared_ptr<T>> freeList;

int mSize;

static const int defaultSize=30;

void allocateChunk(){
for(int i=0;i<mSize;i++){
freeList.push(std::make_shared<T>());
}

}

private:
ObjPool(const ObjPool<T> &src)=delete;
ObjPool<T> &operator=(const ObjPool<T> &rhs)=delete;

};

#endif


—————————————————————————————————————————————————————————————————

//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155

author:天下无双

Email:royalchen@royalchen.com

2015-7-18

于广州天河荷光路

——————————————————————————————————————————————————————————————————
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  malloc 对象池