00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _CJ_ARRAY_AUTOPTR_HH_
00021 #define _CJ_ARRAY_AUTOPTR_HH_ 1
00022
00023 #include "JLOG.hh"
00024
00025 namespace jsplib {
00026
00028
00032 template < typename T > class array_autoptr {
00033 private:
00034 T * m_p;
00035
00036 static void *operator new(size_t size);
00037 static void operator delete(void *ptr);
00038 static void *operator new[](size_t size);
00039 static void operator delete[](void *ptr);
00040
00041 public:
00043 array_autoptr(T * p = 0):m_p(p) {}
00045
00047 array_autoptr(const array_autoptr<T> & that) { if(m_p) delete [] m_p; m_p = that.m_p; that.m_p = 0; }
00049 ~array_autoptr() { if(m_p) delete [] m_p; JLOG(9, std::cout << "array_autoptr::~array_autoptr called. p = " << std::hex << m_p << std::dec << std::endl; ) }
00051
00053 T * release() { T * p = 0; std::swap(p, m_p); return p; }
00055
00057 T * get() { return m_p; }
00058 };
00059
00060 }
00061
00062 #endif // _CJ_ARRAY_AUTOPTR_HH_