00001 //-*- C++ -*- 00014 #ifndef QLIB_ACE_AUTO_RELEASE_PTR_H 00015 #define QLIB_ACE_AUTO_RELEASE_PTR_H 00016 00017 namespace qlib { 00018 00019 namespace ace { 00020 00028 template<typename T> 00029 class Auto_Release_Ptr{ 00030 public: 00031 Auto_Release_Ptr(void) : ptr_(0) {} 00032 Auto_Release_Ptr(const T * ptr) : ptr_(ptr) { } 00033 Auto_Release_Ptr(const Auto_Release_Ptr<T> &rhs) { *this = rhs; } 00034 ~Auto_Release_Ptr(void) { ptr_->release(); } 00035 00036 Auto_Release_Ptr & operator= (const Auto_Release_Ptr<T> &rhs) { 00037 ptr_ = rhs.ptr_; 00038 rhs.ptr_ = NULL; 00039 } 00040 00041 void assign(const T * ptr) { 00042 if(ptr_) 00043 ptr_->release(); 00044 00045 ptr_ = ptr; 00046 } 00047 00048 T * get(void) const { return ptr_; } 00049 T * operator->() const { return ptr_; } 00050 private: 00051 T * ptr_; 00052 }; 00053 }// ace 00054 } // qlib 00055 00056 #endif /* QLIB_ACE_AUTO_RELEASE_PTR_H */ 00057 00058