template<typename T>
class auto_ptr
{
public:
explicit autp_ptr(T *p = 0) :
m_ptr(p){}
auto_ptr(const auto_ptr<T>& copy) : m_ptr(copy.release()){}
auto_ptr<T>& operator=(const auto_ptr<T>& assign)
{
if (this != &assign)
{
delete m_ptr;
m_ptr=assign.release();
// 释放并移交拥有权
}
return *this;
};
~auto_ptr(){delete m_ptr;} // 负责释放存储
T&operator*(){return*m_p;} // 重载“*”
T*operator->(){return m_p;} // 重载“->”
T* release() const
{
T *temp = m_ptr;
(const_cast<auto_ptr<T> *(this))->m_ptr = 0;
return temp;
}
private:
T * m_ptr;
};
注意:此智能指针不可以做为STL容器的元素。