c++智能指针总结

c++11智能指针有unique_ptr, shared_ptr和weak_ptr;(auto_ptr已经被c++11标准弃用,弃用原因在文章结尾介绍)

1.unique_ptr 独占型

保证同一时间只能有一个智能指针指向该对象:

unique_ptr<string> p1 (new string ("ok"));  
unique_ptr<string> p2;                       
p2 = p1; //报错

当程序试图将一个 unique_ptr 赋值给另一个时,如果源 unique_ptr 是个临时右值,编译器允许这么做:

unique_ptr<string> p3;
p3 = unique_ptr<string>(new string ("ok"));  //编译通过

若一定要以第一种方式重用指针,可使用std::move()

unique_ptr<string> p1 (new string ("ok"));  
unique_ptr<string> p2;                       
p2 = move(p1);//合法;此时p1指向其他对象
2.shared_ptr 共享型

多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”时候释放。可通过new,或者传入auto_ptr,shared_ptr,weak_ptr构造。
成员函数:
use_count():返回引用计数个数
unique():返回是否独占
swap():交换两个shared_ptr所拥有的对象
reset():放弃内部对象的所有权(对象引用计数减1)
get():返回内部对象(指针)

用c++实现一个简单的shared_ptr:
https://blog.csdn.net/sunximei/article/details/119719199

3.weak_ptr 弱拥有

不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对象的一个访问手段。它的构造和析构函数不会引起引用计数的变化。它可以从另一个share_ptr或者weak_ptr对象构造。
和hared_ptr之间可以相互转化,shared_ptr可以直接赋值给它,它可以通过调用lock函数来获得shared_ptr。
weak_ptr主要是为了解决shared_ptr相互引用时的死锁问题。
死锁举例:

4.auto_ptr弃用的原因
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值