00001 // 00002 // Copyright (C) CERN, Geneva 00003 // 00004 00005 #ifndef _GCPSEUDONEW_H 00006 #define _GCPSEUDONEW_H 00007 #include <vector> 00008 00009 #ifdef AIDA_STD 00010 # undef AIDA_STD 00011 #endif 00012 00013 #ifdef AIDA_NOT_USE_STD 00014 # define AIDA_STD 00015 #else 00016 # define AIDA_STD std 00017 #endif 00018 00046 template <class T > class GcPseudoNew : public PseudoNew <T> { 00047 public: 00049 GcPseudoNew (void *libFunPtr) : PseudoNew <T> (libFunPtr) {} 00050 00052 virtual ~GcPseudoNew () { 00053 size_t i; 00054 for (i=0 ; i <instances.size(); i++) 00055 delete instances[i]; 00056 } 00057 00061 virtual T* create() { 00062 T* newItem = (*(this->newMethodPtr))(); 00063 instances.push_back(newItem); 00064 return newItem; 00065 } 00066 private: 00067 AIDA_STD::vector <T*> instances; 00071 GcPseudoNew (GcPseudoNew &oldG) {} 00072 GcPseudoNew (GcPseudoNew &oldG, void *libFunPtr) : 00073 PseudoNew <T> (libFunPtr) {} 00074 GcPseudoNew(const GcPseudoNew &oldG, void *libFunPtr): 00075 PseudoNew <T> (libFunPtr){} 00076 void operator = (GcPseudoNew &oldG) {} 00077 }; 00078 00079 #endif // _PSEUDONEW_H