|
|

楼主 |
发表于 2006-5-15 13:14:00
|
显示全部楼层
Re:内存池模型
//.cpp
#include "MemPoolTest.h"
CBuffer::CBuffer()
{
}
CBuffer::~CBuffer()
{
cout << "~CBuffer" << endl;
}
void *CBuffer: perator new(size_t)
{
CBuffer *p = NULL;
p = static_cast<CBuffer*>(m_MemPool.Allocate());
int m_nInuse, m_nFree;
m_MemPool.GetInfo(m_nInuse, m_nFree);
cout << "CBuffer Allocate m_nInuse is " << m_nInuse << " m_nFree is "<< m_nFree << endl;
return p;
}
void CBuffer::operator delete(void *deadobject)
{
m_MemPool.Release((CBuffer *)deadobject);
int m_nInuse, m_nFree;
m_MemPool.GetInfo(m_nInuse, m_nFree);
cout << "CBuffer Release m_nInuse is " << m_nInuse << " m_nFree is "<< m_nFree << endl;
}
CMemPoolTest::CMemPoolTest()
{
}
CMemPoolTest::~CMemPoolTest()
{
list<CBuffer*>::const_iterator pos;
for(pos = m_BufferList.begin(); pos != m_BufferList.end(); ++pos){
delete (CBuffer *)(*pos);
}
m_BufferList.clear();
}
void *CMemPoolTest::operator new(size_t)
{
CMemPoolTest *p = NULL;
p = static_cast<CMemPoolTest*>(m_MemPool.Allocate());
/*
int m_nInuse, m_nFree;
m_MemPool.GetInfo(m_nInuse, m_nFree);
cout << "Allocate m_nInuse is " << m_nInuse << " m_nFree is "<< m_nFree << endl;
*/
return p;
}
void CMemPoolTest::operator delete(void *deadobject)
{
m_MemPool.Release((CMemPoolTest *)deadobject);
/*
int m_nInuse, m_nFree;
m_MemPool.GetInfo(m_nInuse, m_nFree);
cout << "Release m_nInuse is " << m_nInuse << " m_nFree is "<< m_nFree << endl;
*/
}
void CMemPoolTest::SetBuffer()
{
CBuffer *p = NULL;
p = new CBuffer();
m_BufferList.push_back(p);
} |
|