C++的智能指针

大佬的讲解

花花酱的学习之路

TARSCPP中用到的智能指针

黎明静悄悄的学习视频

标准库中的智能指针:
std::auto_ptr    --single ownership  (C++98中出现,缺陷较多,被摒弃)
std::unique_ptr  --single ownership  (C++11替代std::auto_ptr,用于单线程)
std::shared_ptr  --shared ownership  (C++11,用于多线程)
std::weak_ptr    --temp/no ownership (C++11)
Introduced in C++ 11
Defined in <memory> header.


std::unique_ptr--一般用于单线程
std::shared_ptr--一般用于多线程

C++标准模板库STL 中提供了四种指针 auto_ptr, unique_ptr, shared_ptr, weak_ptr.

(1)auto_ptr&unique_ptr 
auto_ptr在 C++98 中提出,但其不能共享对象,不能管理数组指针,也不能放在容器中.因此在 C++11中被
摒弃,并提出unique_ptr来替代,支持管理数组指针,但不能共享对象.
(2)shared_ptr&weak_ptr
shared_ptr和weak_ptr则是C++11从标准库Boost中引入的两种智能指针.
shared_ptr用于解决多个指针共享一个对象的问题,但存在循环引用的问题,引入weak_ptr主要用于解决循
环引用的问题.



boost库中的智能指针:
boost::scoped_ptr
boost::shared_ptr
boost::scoped_array
boost::shared_array
boost::weak_ptr
boost::intrusive_ptr
 
 
unique_ptr
持有对对象的独有权——两个unique_ptr不能指向一个对象,即 unique_ptr 不共享它所管理的对象,
它无法复制到其他 unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库
(STL)算法,只能移动 unique_ptr,即对资源管理权限可以实现转移.
 
shared_ptr 
是一个标准的共享所有权的智能指针,允许多个指针指向同一个对象,在使用引用计数的机制上提供
了可以共享所有权的智能指针.
 
weak_ptr
它不具有普通指针的行为,没有重载 operator* 和 operator->,表明其是功能较弱的
智能指针。它协助 shared_ptr 工作,可获得资源的观测权,像旁观者那样观测资源的使用情况. 观
察者意味着 weak_ptr 只对 shared_ptr 进行引用,而不改变其引用计数,当被观察的 shared_ptr 
失效后,相应的 weak_ptr 也相应失效, weak_ptr可用于打破循环引用.引用计数是一种便利的内
存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.

1.std::unique_ptr

 

2.std::shared_ptr

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值