内存池内存释放问题。。。。

xuggzu 2011-01-02 09:28:48
有这样一个内存池类:

template <class T,int ALLOC_BLOCK_SIZE=10>
class CMemoryPool
{
public:
static void* operator new(std::size_t allocLength)
{
ASSERT(sizeof(T)==allocLength);
ASSERT(sizeof(T)>=sizeof(UCHAR*));

if(!mFreePointer)
allocBlock();
UCHAR *ReturnPointer=mFreePointer;

mFreePointer=*reinterpret_cast<UCHAR**>(ReturnPointer);

return ReturnPointer;
}
static void operator delete(void *deletePointer)
{
*reinterpret_cast<UCHAR**>(deletePointer)=mFreePointer;
mFreePointer=static_cast<UCHAR*>(deletePointer);
}
private:
static void allocBlock()
{
mFreePointer=new UCHAR[sizeof(T)*ALLOC_BLOCK_SIZE];
UCHAR **Current=reinterpret_cast<UCHAR**>(mFreePointer);
UCHAR *Next=mFreePointer;

for(int i=0;i<ALLOC_BLOCK_SIZE;i++)
{
Next+=sizeof(T);
*Current=Next;
Current=reinterpret_cast<UCHAR**>(Next);
}
*Current=0;
}private:
static UCHAR *mFreePointer;
protected:
~CMemoryPool() {delete mFreePointer;}
};
template<class T,int ALLOC_BLOCK_SIZE>
UCHAR *CMemoryPool<T,ALLOC_BLOCK_SIZE>::mFreePointer;

使用后由于delete操作符重写了,并没有释放分配的内存。
请教如何释放已分配内存?????????代码怎么写?谢谢!
...全文
146 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧