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 }
00039
00040 #endif // ERIS_DELETE_LATER_H