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

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

在C++11中,shared_ptr 在中被定义为:
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 T The 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_before Owner-based ordering

你可能感兴趣的:(C++语言基础知识)