Eris 1.3.19
|
00001 #ifndef ERIS_DELETE_LATER_H 00002 #define ERIS_DELETE_LATER_H 00003 00004 namespace Eris 00005 { 00006 00007 class BaseDeleteLater 00008 { 00009 public: 00010 virtual ~BaseDeleteLater() = 0; 00011 }; 00012 00013 00014 template <class T> 00015 class DerivedDeleteLater : public BaseDeleteLater 00016 { 00017 public: 00018 DerivedDeleteLater(T* ins) : m_instance(ins) { } 00019 virtual ~DerivedDeleteLater() 00020 { 00021 delete m_instance; 00022 } 00023 00024 private: 00025 T* m_instance; 00026 }; 00027 00028 void pushDeleteLater(BaseDeleteLater* bl); 00029 00030 void execDeleteLaters(); 00031 00032 template <class T> 00033 void deleteLater(T* ins) 00034 { 00035 pushDeleteLater(new DerivedDeleteLater<T>(ins)); 00036 } 00037 00038 } // of namespace 00039 00040 #endif // ERIS_DELETE_LATER_H