首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

署理删除

2012-11-23 
代理删除/*********************************************************************  文件名:Server.h* 

代理删除

/*********************************************************************  文件名:   Server.h*  文件描述: 网络游戏模拟*  创建人:   陈泽丹 ,2012年11月16日     *  版本号:   1.0*  修改记录:********************************************************************/#pragma once#include <set>using namespace std;class Delete_Proxy{private://代理项struct IDeleteSink{ virtual ~IDeleteSink(){}virtual void delete_accessory() = 0;};//绑定附件template<class _T>struct Die:public IDeleteSink{Die(_T* _p_obj):mp_obj(_p_obj){}void delete_accessory(){ delete mp_obj; }_T* mp_obj;};map< const void*, IDeleteSink* > m_delete_objs;//删除相关附件void delete_accessorys(){for(map< const void*, IDeleteSink* >::iterator it = m_delete_objs.begin(); m_delete_objs.end() != it; ++it ){it->second->delete_accessory();delete it->second;}m_delete_objs.clear();}public:virtual ~Delete_Proxy(){ delete_accessorys(); }//订阅"删除代理"template<class _T>void push(_T* _p_obj){map< const void*, IDeleteSink* >::iterator it = m_delete_objs.find(_p_obj);if( m_delete_objs.end() == it )m_delete_objs[_p_obj] = new Die<_T>(_p_obj);}//取消"删除代理"template<class _T>void pop(const _T* _p_obj){map< const void*, IDeleteSink* >::iterator it = m_delete_objs.find(_p_obj);if( m_delete_objs.end() != it ){delete it->second;m_delete_objs.erase(it);}}};


 

热点排行