裸指针:直接定义的指针
当裸指针指向的对象被析构,这个指针就是空悬指针
无法判断是个指针是一个空悬指针
为什么需要智能指针?
用裸指针你不知道你指的是一组对象还是一个对象。
auto_ptr(c++17中移除)
智能指针不对带有const的对象,因为要修改
拷贝构造时候,不知道是都指向,可能会释放两次。
template<class _TY>
class my_auto_ptr
{
private:
bool _Owns;
_TY* _Ptr;
public:
my_auto_ptr(_TY* p=NULL):_Owns(p!=NULL),_Ptr(p){}
~my_auto_ptr()
{
if(_Owns){delete _Ptr;}
_Owns=false;
_Ptr=NULL;
}
my_auto_ptr(const my_auto_ptr& op):_Owns(op._Owns),_Ptr(op.relese()){}//拷贝构造的时候连值一起给他了,自己就没有了,有问题。
my_auto_ptr& operator=(const my_auto_ptr& _Y)
{
if(this ==&_Y)return *this;
if(_Owns)
{
delete _Ptr;
}
_Owns=_Y.Owns;
_Ptr=_Y.release();
return 0;
}
_TY* get()const{return Ptr;}
_TY& operatoe*()const
{
return *(get());
}
_TY* opetator->()const
{
return get();
}
void reset(_TY* p=NULL)//重置函数
{
if(_Owns)
{
delete _Ptr;
}
_Ptr=p;
}
_TY * release()const
{
_TY* tmp=NULL;
if(_Owns)
{
((my_auto_ptr*)this)->_Owns=flase;
tmp=_Ptr;
((my_auto_ptr*)this)->_Ptr=NULL;
}
return tmp;
}
};