码迷,mamicode.com
首页 > 编程语言 > 详细

非线程安全对象池

时间:2014-06-30 00:25:01      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:blog   get   2014   name   c   for   

今天的微博有人讨论到对象池,我想到之前项目的实现,应该用模板来实现啊,唉,还是被前人的想法给框定了,不过实现一个特别简单,花了几分钟写了个:

#include <queue>
#include <cstdio>

using namespace std;

const int DefaultPoolSize = 1024;
template <class T>
class ObejctPool{
private:
	queue<T*> m_OriBlock;
	queue<T*> m_ObjectBlock;
	const int m_DefaultBlockSize; 
public:
	~ObejctPool(){
		while (!m_OriBlock.empty()){
			T* pBlock = m_OriBlock.front();
			delete []pBlock;
			m_OriBlock.pop();
		}
	}
	ObejctPool(int blockSize = DefaultPoolSize):m_DefaultBlockSize(blockSize){
	}
	T* GetObject(){
		if (true == m_ObjectBlock.empty()){
			T* pNewObject = new T[m_DefaultBlockSize];
			m_OriBlock.push(pNewObject);
			for (int i = 0; i < m_DefaultBlockSize; ++i){
				m_ObjectBlock.push(pNewObject+i);
			}
		}
		
		T* pGetObject = m_ObjectBlock.front();
		m_ObjectBlock.pop();
		return pGetObject;
	}
	
	void ReleaseObejct(T* pObject){
		if (0 == pObject){
			return;
		}
		
		m_ObjectBlock.push(pObject);
	}
	
};

int main(){
	ObejctPool<int> obj;
	int* p = obj.GetObject();
	*p = 1;
	printf("get:%d\n", *p);
	obj.ReleaseObejct(p);
}



等下再实现个线程安全的。

非线程安全对象池,布布扣,bubuko.com

非线程安全对象池

标签:blog   get   2014   name   c   for   

原文地址:http://blog.csdn.net/boyxiaolong/article/details/35614979

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!