C++缓冲池

来源:互联网 发布:南风知我意1,2txt下载 编辑:程序博客网 时间:2024/06/15 05:37

写了一个最简单缓冲池,多线程不安全,仅供参考!!!

 

class CB{public:CB() : m_n(0){cout<<"CB::CB()\n";}~CB(){cout<<"CB::~CB()\n";}int m_n;};template < class T >class cpool{public:cpool() : m_pSingleList(NULL){cout<<"cpool::cpool()\n";}~cpool(){_NODE_ * ptmp = NULL;while(m_pSingleList){ptmp = m_pSingleList;m_pSingleList = m_pSingleList->pNext;delete ptmp->pData;delete ptmp;}cout<<"cpool::~cpool()\n";}shared_ptr<typename T> get(){if(m_pSingleList){_NODE_ * pNode = m_pSingleList;m_pSingleList = m_pSingleList->pNext;T * pT = pNode->pData;delete pNode;return shared_ptr< typename T >(pT, delete_t(this));}else{return shared_ptr< typename T >(new T, delete_t(this));}}void free_t(T * pT){m_pSingleList = new _NODE_(m_pSingleList, pT);}private:class delete_t{public:delete_t(cpool * ppool) : m_ppool(ppool){}void operator ()(T * pT){m_ppool->free_t(pT);}cpool * m_ppool;};private:struct _NODE_{_NODE_(_NODE_ * pNode = NULL, T * pT = NULL) : pNext(pNode), pData(pT){}_NODE_ * pNext;T * pData;};private:_NODE_ * m_pSingleList;};int main(int argc, char * argv[]){cpool< CB > * pcb_pool1 = new cpool< CB >();{shared_ptr< CB > pCB = pcb_pool1->get();pCB->m_n = 5;}cout<<"*********************************\n\n";cpool< CB > * pcb_pool2 = new cpool< CB >();{shared_ptr< CB > pCB = pcb_pool2->get();pCB->m_n = 10;shared_ptr< CB > pCB2 = pcb_pool2->get();}delete pcb_pool2;cout<<"*********************************\n";delete pcb_pool1;return 0;}


 

0 0
原创粉丝点击