1 #ifndef ERIS_DELETE_LATER_H 2 #define ERIS_DELETE_LATER_H 3 4 namespace Eris 5 { 6 7 class BaseDeleteLater 8 { 9 public: 10 virtual ~BaseDeleteLater() = 0; 11 }; 12 13 14 template <class T> 15 class DerivedDeleteLater : public BaseDeleteLater 16 { 17 public: DerivedDeleteLater(T * ins)18 DerivedDeleteLater(T* ins) : m_instance(ins) { } ~DerivedDeleteLater()19 virtual ~DerivedDeleteLater() 20 { 21 delete m_instance; 22 } 23 24 private: 25 T* m_instance; 26 }; 27 28 void pushDeleteLater(BaseDeleteLater* bl); 29 30 void execDeleteLaters(); 31 32 template <class T> deleteLater(T * ins)33void deleteLater(T* ins) 34 { 35 pushDeleteLater(new DerivedDeleteLater<T>(ins)); 36 } 37 38 } // of namespace 39 40 #endif // ERIS_DELETE_LATER_H 41