unique_ptr智能指针特性

本文介绍了C++中的智能指针,包括auto_ptr的特性和弃用原因,以及现代C++中常用的unique_ptr和shared_ptr。智能指针主要目的是自动管理内存,防止内存泄漏。unique_ptr具有唯一性,不允许拷贝和赋值,而shared_ptr允许多个智能指针共享同一资源。文章还展示了get(), release()和reset()等关键函数的使用方法。
摘要由CSDN通过智能技术生成
 C++中早期使用的智能指针是auto_ptr,在早些时候它的应用比较方便,但随着发展与要求的变化导致auto_ptr不能够很好的满足需求,于是目前auto_ptr已经被弃用了
何为智能指针?
我们在平常进行new空间之后,总是会忘掉delete释放空间,或是因为指针还在使用空间时就被释放而导致的指针对内存的非法访问,而智能指针要做的就是自动释放对象所占有的空间,调用析构函数来对new出来的空间进行delete释放。
auto_ptr特性:
1)不允许隐式构造;
   隐士构造:eg:int*p1=new int(10);
   			    auto_ptr<int>p2=p1; //error,不允许隐式构造
   			    auto_ptr<int>p2=(auto_ptr<int>)p1;//显式转后方可
2)允许拷贝构造;
3)允许赋值运算符;
4)不能让多个智能指针指向同一个空间


常用的智能指针:
unique_ptr,shared_ptr,weak_ptr三种智能指针
常用的函数方法:
1)get():获取当前智能指针;
eg:auto_ptr<int>p(new int(1));
         int *tmp = p.get();  cout<<*tmp<<endl;
 2) release():转移资源,返回值是指针对象
 eg:auto_ptr<int>p(new int(1));
         int *tmp = p.release();  //将p的资源转移给tmp后,将自身置空。
         cout<<*tmp<<endl;
3) reset():重置智能指针
         eg:auto_ptr<int>p(new int(1));
         auto_ptr<int>p2(new int(2));
         p2.reset(p); //将自身资源释放,重新指向p资源
         
唯一性智能指针(unique_ptr):
由于唯一性智能指针允许隐式构造,不允许拷贝构造(可以使用右值引用来达到拷贝构
造),不允许赋值运算
符,也不允许多个唯一指针指向同一个空间;
所以在声明唯一性智能指针的时候就要对其进行显式的初始化;
eg:int * p =new int(1);
    unique_ptr< int >p2(p); //显式初始化
如果没有初始化也没有关系,可以调用reset()函数对其进行初始化。
eg:int * p = new int(1);
    unique_ptr< int > p2;
    p2.reset( p);
    unique_ptr<int>p3;
    p3 = move(p2); //产生临时指针对象隐式构造p2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DaysAway

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值