NGSolve  5.3
ngstd/autoptr.hpp
00001 #ifndef FILE_NGS_AUTOPTR
00002 #define FILE_NGS_AUTOPTR
00003 
00004 /**************************************************************************/
00005 /* File:   autoptr.hpp                                                    */
00006 /* Author: STL, Joachim Schoeberl                                         */
00007 /* Date:   29. Dec. 02                                                    */
00008 /**************************************************************************/
00009 
00010 namespace ngstd
00011 {
00012 
00017 template <typename T>
00018 class AutoPtr
00019 {
00020 private:
00022   T * ptr;
00023   bool owner;
00024 public:
00026   typedef T* pT;
00027 
00029   explicit AutoPtr (T * p = 0, bool aowner = true)  { ptr = p; owner = aowner;}
00031   ~AutoPtr () { if (owner) delete ptr; }
00032   
00034   T & operator*() const { return *ptr; }
00035 
00037   T* operator->() const { return ptr; }
00038 
00040   T *& Ptr() { return ptr; }
00041 
00043   T * Ptr() const { return ptr; }
00044 
00046   void Reset(T * p = 0, bool aowner = true) 
00047   { if (p != ptr) { if (owner) delete ptr; ptr = p; }; owner = aowner; }
00048 
00050   operator bool () { return ptr != 0; }
00051 
00052 private:
00054   AutoPtr (AutoPtr &) { ; }
00056   AutoPtr & operator= (AutoPtr &) { return *this; }
00057 };
00058 
00059 }
00060 
00061 #endif