home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 31 / CDASC_31_1996_juillet_aout.iso / vrac / cuj0796.zip / PLAUGER.ZIP / MEMORY6 < prev    next >
Text File  |  1996-04-24  |  1KB  |  38 lines

  1. --------------- Listing 5: <memory>, part 6 -------------
  2.  
  3.         // TEMPLATE CLASS auto_ptr
  4. template<class T>
  5.     class auto_ptr {
  6. public:
  7.     typedef T element_type;
  8.     explicit auto_ptr(T *p= 0)
  9.         : Owns(p != 0), Ptr(p) {}
  10. ///    template<class U>
  11.     typedef T U;    ///
  12.     auto_ptr(const auto_ptr<U>& y)
  13.         : Owns(y.Owns), Ptr((T *)y.release()) {}
  14. ///    template<class U>
  15.     auto_ptr<T>& operator=(auto_ptr<U>& y)
  16.         {if ((void *)this != (void *)&y)
  17.             {if (Owns)
  18.                 delete Ptr;
  19.             Owns = y.Owns;
  20.             Ptr = (T *)y.release(); }
  21.         return (*this); }
  22.     ~auto_ptr()
  23.         {if (Owns)
  24.             delete Ptr; }
  25.     T& operator*() const
  26.         {return (*get()); }
  27.     T *operator->() const
  28.         {return (get()); }
  29.     T *get() const
  30.         {return (Ptr); }
  31.     T *release() const
  32.         {((auto_ptr<T> *)this)->Owns = false;
  33.         return (Ptr); }
  34. private:
  35.     bool Owns;
  36.     T *Ptr;
  37.     };
  38.