我所熟悉的C++智能指针auto_ptr vs shared_ptr (二)

鉴于auto_ptr 所出现的无法复制,且不能满足标准容器对元素的要求,所以boost库中提供了一种新型的智能指针 shared_ptr,它通过引用计数(reference counting)的原理,解决了多个指针之间共享对象所有权的问题,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时才删除被包装的动态分配的对象。
shared_ptr也可以安全地放到标准容器中,并弥补了auto_ptr因为转移语义而不能把指针作为STL容器元素的缺陷。

在C++11中,shared_ptr 在<memory>中被定义为:
template< class T > class shared_ptr;

std::shared_ptr 是通过指针保持某个对象的共享拥有权的智能指针。若干个 shared_ptr 对象可以拥有同一个对象;最后一个指向该对象的 shared_ptr 被销毁或重置时,该对象被销毁。销毁该对象时使用的是 delete 表达式或者是在构造 shared_ptr 时传入的自定义删除器(deleter)。
shared_ptr 也可以不拥有对象,称作空(empty)。
shared_ptr 满足 CopyConstructible 和 CopyAssignable 的要求。

shared_ptr实现细节

成员类型定义
element_type TThe type of the managed object,即被shared_ptr管理着的对象

包含的成员函数如下所示:

成员函数说明
(constructor)constructs new shared_ptr
(destructor)如果没有更多shared_ptrs的的链接解构拥有的对象
operator=分配shared_ptr
reset取代管理的对象
swap交换所管理的对象
get返回一个指针,指向被管理对象
operator* ;operator->解引用指针到的管理对象
use_count返回shared_ptr对象指的是在同一个管理对象的数量
unique检查是否被管理对象的管理仅由当前shared_ptr的实例
operator bool检查是否有相关的管理对象
owner_beforeOwner-based ordering
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值