C++(9):智能指针

本文详细介绍了C++中的三种智能指针:auto_ptr、unique_ptr和shared_ptr。讨论了它们的特点和使用场景,如auto_ptr的资源自动管理、unique_ptr的独享所有权以及不支持拷贝,shared_ptr的引用计数和循环引用解决方案。此外,还提到了右值引用和make_shared的作用。
摘要由CSDN通过智能技术生成

有时候申请空间而没有释放,就会造成内存泄漏,因此有智能指针的出现。

一、智能指针auto_ptr(只需要进行申请new,而不需要delete,系统会自动对内存进行管理)

1.RALL:使用局部对象来管理资源的技术成为资源获取即初始化。(建立在栈上的技术)

                如何让资源自动销毁,即利用RALL,利用局部对象自动销毁的特性来控制资源生命周期。

2.注意智能指针中.和->的区别

  . 是对象自身的方法,->是指针存放的对象的属性和方法

也就是可以使用 pobja->Print() ,(*pobja).Print()

3.智能指针的拷贝构造

4.智能指针的拷贝函数

5.智能指针的重置函数和释放函数

void reset(_Ty *p = NULL)  //重置函数,重置指向
	{
		if(_Owns) // _Ptr ->Object;
		{
			delete _Ptr;
		}
		_Ptr = p;
	}
_Ty * release() const    //释放函数,释放了指针,把原先拥有的指针返回,而自己已经没有了
	{
		_Ty *tmp = NULL;
		if(_Owns)
		{  
            //_Owns = false  //舍弃
			((auto_ptr<_Ty> *) this)->_Owns = false;  //将this进行强转,消除其常性
			tmp = _Ptr;
			((auto_ptr<_Ty> *) this)->_Ptr = NULL;
		}
		return tmp;
	}

6.auto_ptr出现的问题:

 ①会出现二义性,不知道是否转移拥有权还是共享拥有权。

②应用场景不明;

③无法释放连续的空间(一组空间);

④不能放入容器中使用

⑤还会出现数值问题。仅仅进行指针传递,第二个打印就编译不通过,丢失了拥有权。&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值