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)33 void deleteLater(T* ins)
34 {
35 	pushDeleteLater(new DerivedDeleteLater<T>(ins));
36 }
37 
38 } // of namespace
39 
40 #endif // ERIS_DELETE_LATER_H
41