在基于回调的模块边界,经常出现需要延迟释放一个对象以便回调者进行一定的操作的情况.如果用定时器又比较麻烦.用内存池也不是很方便. 下面给出一种最简洁的解决方法: template<typenameT,intBufferSize=10>classDelayCleaner...{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];};//需要延迟删除的对象classTarget...{public:Target()...{}~Target()...{}};//测试代码:DelayCleaner<Target,5>targetBuffer;for(inti=0;i<8;i++)targetBuffer.DelayDelete(newTarget());