在基于回调的模块边界,经常出现需要延迟释放一个对象以便回调者进行一定的操作的情况.如果用定时器又比较麻烦.用内存池也不是很方便. 下面给出一种最简洁的解决方法: template < typenameT, int BufferSize = 10 > class DelayCleaner ... {public:DelayCleaner(void)...{_index=0;memset(_bufferArray,0,sizeof(T*)*BufferSize);}virtual~DelayCleaner(void)...{for(inti=0;i<BufferSize;i++)...{delete_bufferArray[_index];_bufferArray[_index]=NULL;_index++;_index%=BufferSize;}}voidAddObjToBuffer(T*obj)...{if(_bufferArray[_index]!=NULL)...{delete_bufferArray[_index];}_bufferArray[_index]=obj;_index++;_index%=BufferSize;}voidDelayDelete(T*obj)...{AddObjToBuffer(obj);}private:unsignedint_index;T*_bufferArray[BufferSize];} ; // 需要延迟删除的对象 class Target ... {public:Target()...{}~Target()...{}} ; // 测试代码: DelayCleaner < Target, 5 > targetBuffer; for ( int i = 0 ;i < 8 ;i ++ )targetBuffer.DelayDelete( new Target());