智能指针auto_ptr

在这里插入图片描述
裸指针:直接定义的指针

当裸指针指向的对象被析构,这个指针就是空悬指针

无法判断是个指针是一个空悬指针

为什么需要智能指针?

用裸指针你不知道你指的是一组对象还是一个对象。

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;
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值