00001 #ifndef CLEANUP_H_ 00002 #define CLEANUP_H_ 00003 00004 class CleanupProc 00005 { 00006 public: 00007 virtual void doClean() = 0; 00008 virtual ~CleanupProc(); 00009 }; 00010 00011 class CleanupHooks 00012 { 00013 public: 00014 static CleanupHooks *getInstance(); 00015 00016 public: 00017 void addHook(CleanupProc *clean_proc); 00018 void removeHook(CleanupProc *clean_proc); 00019 void cleanup(); 00020 00021 private: 00022 CleanupHooks(); 00023 ~CleanupHooks(); 00024 class CleanupHooksImp *m_imp; 00025 }; 00026 00027 template <typename T> 00028 class SimpleCleanup : public CleanupProc 00029 { 00030 public: 00031 SimpleCleanup(T *inst) : m_inst(inst) 00032 { 00033 CleanupHooks::getInstance()->addHook(this); 00034 } 00035 00036 ~SimpleCleanup() 00037 { 00038 CleanupHooks::getInstance()->removeHook(this); 00039 } 00040 00041 void doClean() 00042 { 00043 m_inst->cleanup(); 00044 } 00045 00046 private: 00047 T *m_inst; 00048 }; 00049 00050 #endif // CLEANUP_H_
1.5.5