内存池模板 参考Poco库 简单易懂
来源:互联网 发布:ping ip 端口 编辑:程序博客网 时间:2024/05/21 05:17
#pragma once#include <vector>#include "Poco\Mutex.h"template<class T>class CFramePool{public:CFramePool(int preAlloc, int maxAlloc = 0);~CFramePool();/**@des 申请一个T*/T* get();/**@des 释放一个T*/void release(T* ptr);/**@des获取池的大小*/int allocated() const;/**@des可用个数*/int available() const;private:CFramePool();//缺省构造??CFramePool(CFramePool&); //默认复制构造CFramePool& operator =(const CFramePool&); //默认赋值Poco::FastMutex m_MtxBlocks;std::vector<T*>m_vecBlocks;intm_nAllocated;int m_nMaxAlloc;};//函数定义template<class T>CFramePool<T>::CFramePool(int preAlloc, int maxAlloc/* = 0*/) :m_nMaxAlloc(maxAlloc),m_nAllocated(preAlloc){m_vecBlocks.clear();for (int i = 0; i < preAlloc; i++){T* ptr = new T;m_vecBlocks.push_back(ptr);}}template<class T>CFramePool<T>::~CFramePool(){std::vector<T*>::iterator it = m_vecBlocks.begin();for (; it != m_vecBlocks.end(); it++){T* ptr = *it;delete ptr;}}template<class T>T* CFramePool<T>::get(){Poco::FastMutex::ScopedLock lock(m_MtxBlocks);if (m_vecBlocks.empty()){if (m_nAllocated < m_nMaxAlloc){++m_nAllocated;T* ptr = new T;return ptr;}else{//throw OutOfMemoryException("MemoryPool exhausted");return NULL;}}else{T* ptr = m_vecBlocks.back();m_vecBlocks.pop_back();return ptr;}}template<class T>void CFramePool<T>::release(T* ptr){Poco::FastMutex::ScopedLock lock(m_MtxBlocks);m_vecBlocks.push_back(ptr);}template<class T>int CFramePool<T>::allocated() const{Poco::FastMutex::ScopedLock lock(m_MtxBlocks);return m_nAllocated;}template<class T>int CFramePool<T>::available() const{Poco::FastMutex::ScopedLock lock(m_MtxBlocks);return m_vecBlocks.size();}
0 0
- 内存池模板 参考Poco库 简单易懂
- POCO库中文编程参考指南(6)Poco::Timestamp
- POCO库中文编程参考指南(6)Poco::Timestamp
- POCO库中文编程参考指南(2)基本数据类型(Poco/Types.h)
- POCO库中文编程参考指南(3)Poco::Net::Socket
- POCO库中文编程参考指南(4)Poco::Net::IPAddress
- POCO库中文编程参考指南(5)Poco::Net::SocketAddress
- POCO库中文编程参考指南(7)Poco::Net::DatagramSocket
- POCO库中文编程参考指南(9)Poco::Net::DNS
- POCO库中文编程参考指南(3)Poco::Net::Socket
- POCO库中文编程参考指南(4)Poco::Net::IPAddress
- POCO库中文编程参考指南(5)Poco::Net::SocketAddress
- POCO库中文编程参考指南(7)Poco::Net::DatagramSocket
- POCO库中文编程参考指南(9)Poco::Net::DNS
- 简单易懂的对象池
- POCO库中文编程参考指南(1)总览
- POCO库中文编程参考指南(1)总览 .
- POCO库中文编程参考指南(1)总览
- Android通用流行框架大全
- Redis安装
- PAT(甲级)1001. A+B Format (20)
- 项目运行提示无法找到调试信息,或者调试信息不匹配解决办法
- 君正T20平台生成jffs2格式rootfs
- 内存池模板 参考Poco库 简单易懂
- 用C#求A+B A一行 B一行
- CSU - 1808 地铁 (最短路,维护边)
- spring-task spring的定时任务
- super oj p52
- ubuntu下tomcat开启远程调试端口
- 安装numpy+mlk失败解决方法
- 最简便的解决Git bash 中文乱码的方法
- ThreadPool 线程池