之前介绍了auto_ptr实现,但其并不完美,当然也不“智能”,鉴于之前的auto_ptr实现了简单的资源管理权的转移,下面来看一下另一种思想的unique_ptr。
在unique_ptr中为了避免繁琐的拷贝、赋值出现的问题,unique_ptr更像是一个油盐不进的老顽固,别人怎么说,他也不听,直接让别人拿不到自己的东西:C++98中是,将拷贝、赋值定义为private属性;C++11中直接将其delete了。
template <typename T>
class Unique_ptr
{
public:
Unique_ptr(T* ptr)
:_ptr(ptr)
{
}
T* operator->()
{
return _ptr;
}
T& operator.()
{
return *_ptr;
}
~Unique_ptr()
{
if (_ptr)
{
delete _ptr;
_ptr = nullptr;
}
}
private:
//c++98中处理方式
Unique_ptr& operator=(Unique_ptr<T> const &);
Unique_ptr(Unique_ptr<T> const &);
//C++11中的处理方式
Unique_ptr& operator=(Unique_ptr<T> const &) = delete;
Unique_ptr(Unique_ptr<T> const &) = delete;
T* _ptr;
};