Listing 5: <memory>, part 6
// TEMPLATE CLASS auto_ptr
template<class T>
class auto_ptr {
public:
typedef T element_type;
explicit auto_ptr(T *p= 0)
: Owns(p != 0), Ptr(p) {}
/// template<class U>
typedef T U; ///
auto_ptr(const auto_ptr<U>& y)
: Owns(y.Owns), Ptr((T *)y.release()) {}
/// template<class U>
auto_ptr<T>& operator=(auto_ptr<U>& y)
{if ((void *)this != (void *)&y)
{if (Owns)
delete Ptr;
Owns = y.Owns;
Ptr = (T *)y.release(); }
return (*this); }
~auto_ptr()
{if (Owns)
delete Ptr; }
T& operator*() const
{return (*get()); }
T *operator->() const
{return (get()); }
T *get() const
{return (Ptr); }
T *release() const
{((auto_ptr<T> *)this)->Owns = false;
return (Ptr); }
private:
bool Owns;
T *Ptr;
};
/* End of File */