MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
shared_ptr< T > 模板类 参考

共享智能指针类模板 更多...

#include <shared_ptr.hpp>

类 shared_ptr< T > 继承关系图:
[图例]

Public 类型

using element_type = T
 元素类型

Public 成员函数

 shared_ptr (nullptr_t np=nullptr) noexcept
 默认构造函数
template<typename U, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
 shared_ptr (U *ptr)
 从原始指针构造函数
template<typename U, typename Deleter, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
 shared_ptr (U *ptr, Deleter &&deleter)
 从原始指针和自定义删除器构造函数
template<typename U, typename Deleter, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
 shared_ptr (unique_ptr< U, Deleter > &&ptr)
 独享智能指针构造函数
 shared_ptr (const shared_ptr &x) noexcept
 拷贝构造函数
shared_ptroperator= (const shared_ptr &x) noexcept
 拷贝赋值运算符
template<typename U, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
 shared_ptr (const shared_ptr< U > &x) noexcept
 类型转换拷贝构造函数
 shared_ptr (shared_ptr &&x) noexcept
 移动构造函数
shared_ptroperator= (shared_ptr &&x) noexcept
 移动赋值运算符
template<typename U, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
 shared_ptr (shared_ptr< U > &&x) noexcept
 类型转换移动构造函数
template<typename U>
 shared_ptr (const shared_ptr< U > &x, T *ptr) noexcept
 从共享指针和别名指针别名构造函数
template<typename U>
 shared_ptr (shared_ptr< U > &&x, T *ptr) noexcept
 移动别名构造函数
template<typename U, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
shared_ptroperator= (const shared_ptr< U > &x) noexcept
 类型转换拷贝赋值运算符
template<typename U, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
shared_ptroperator= (shared_ptr< U > &&x) noexcept
 类型转换移动赋值运算符
 ~shared_ptr () noexcept
 析构函数
void reset () noexcept
 重置共享指针
template<typename U>
void reset (U *ptr)
 重置共享指针并管理新对象
template<typename U, typename Deleter>
void reset (U *ptr, Deleter deleter)
 带自定义删除器重置共享指针并管理新对象
MSTL_NODISCARD long use_count () const noexcept
 获取引用计数
MSTL_NODISCARD bool unique () const noexcept
 检查是否独占所有权
void swap (shared_ptr &x) noexcept
 交换两个共享指针
MSTL_NODISCARD T * get () const noexcept
 获取原始指针
MSTL_NODISCARD T * operator-> () const noexcept
 指针解引用运算符
MSTL_NODISCARD add_lvalue_reference_t< T > operator* () const noexcept
 解引用运算符
MSTL_NODISCARD operator bool () const noexcept
 布尔转换运算符
template<typename U>
MSTL_NODISCARD bool owner_equal (const shared_ptr< U > &rhs) const noexcept
 检查所有权是否相等
template<typename U>
MSTL_NODISCARD bool owner_equal (const weak_ptr< U > &rhs) const noexcept
 与弱指针检查所有权是否相等
template<typename U>
MSTL_NODISCARD bool owner_before (const shared_ptr< U > &rhs) const noexcept
 比较所有权顺序
template<typename U>
MSTL_NODISCARD bool owner_before (const weak_ptr< U > &rhs) const noexcept
 与弱指针比较所有权顺序

详细描述

template<typename T>
class shared_ptr< T >

共享智能指针类模板

模板参数
T对象类型

实现引用计数的智能指针,多个实例可以共享同一对象的所有权。 当最后一个共享智能指针被销毁时,对象会被自动删除。

在文件 shared_ptr.hpp272 行定义.

构造及析构函数说明

◆ shared_ptr() [1/9]

template<typename T>
shared_ptr< T >::shared_ptr ( nullptr_t np = nullptr)
inlinenoexcept

默认构造函数

参数
np空指针字面量

创建空的共享指针,不管理任何对象。

在文件 shared_ptr.hpp304 行定义.

◆ shared_ptr() [2/9]

template<typename T>
template<typename U, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
shared_ptr< T >::shared_ptr ( U * ptr)
inline

从原始指针构造函数

模板参数
U可转换为T*的类型
参数
ptr原始指针

在文件 shared_ptr.hpp312 行定义.

◆ shared_ptr() [3/9]

template<typename T>
template<typename U, typename Deleter, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
shared_ptr< T >::shared_ptr ( U * ptr,
Deleter && deleter )
inlineexplicit

从原始指针和自定义删除器构造函数

模板参数
U可转换为T*的类型
Deleter删除器类型
参数
ptr原始指针
deleter删除器

在文件 shared_ptr.hpp325 行定义.

◆ shared_ptr() [4/9]

template<typename T>
template<typename U, typename Deleter, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
shared_ptr< T >::shared_ptr ( unique_ptr< U, Deleter > && ptr)
inlineexplicit

独享智能指针构造函数

模板参数
U可转换为T*的类型
Deleter删除器类型
参数
ptr独享智能指针

在文件 shared_ptr.hpp337 行定义.

◆ shared_ptr() [5/9]

template<typename T>
shared_ptr< T >::shared_ptr ( const shared_ptr< T > & x)
inlinenoexcept

拷贝构造函数

参数
x要拷贝的共享指针

在文件 shared_ptr.hpp344 行定义.

◆ shared_ptr() [6/9]

template<typename T>
template<typename U, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
shared_ptr< T >::shared_ptr ( const shared_ptr< U > & x)
inlinenoexcept

类型转换拷贝构造函数

模板参数
U可转换为T*的类型
参数
x要拷贝的共享指针

在文件 shared_ptr.hpp369 行定义.

◆ shared_ptr() [7/9]

template<typename T>
shared_ptr< T >::shared_ptr ( shared_ptr< T > && x)
inlinenoexcept

移动构造函数

参数
x要移动的共享指针

在文件 shared_ptr.hpp378 行定义.

◆ shared_ptr() [8/9]

template<typename T>
template<typename U, enable_if_t< is_convertible_v< U *, T * >, int > = 0>
shared_ptr< T >::shared_ptr ( shared_ptr< U > && x)
inlineexplicitnoexcept

类型转换移动构造函数

模板参数
U可转换为T*的类型
参数
x要移动的共享指针

在文件 shared_ptr.hpp405 行定义.

◆ shared_ptr() [9/9]

template<typename T>
template<typename U>
shared_ptr< T >::shared_ptr ( const shared_ptr< U > & x,
T * ptr )
inlinenoexcept

从共享指针和别名指针别名构造函数

模板参数
U原始共享指针的类型
参数
x原始共享指针
ptr别名指针
注解
创建的共享指针与参数共享智能指针共享所有权,但指向不同的对象

在文件 shared_ptr.hpp419 行定义.

◆ ~shared_ptr()

template<typename T>
shared_ptr< T >::~shared_ptr ( )
inlinenoexcept

析构函数

注解
减少强引用计数,当计数为0时删除对象

在文件 shared_ptr.hpp463 行定义.

成员函数说明

◆ get()

template<typename T>
MSTL_NODISCARD T * shared_ptr< T >::get ( ) const
inlinenoexcept

获取原始指针

返回
管理的对象指针

在文件 shared_ptr.hpp538 行定义.

被这些函数引用 const_pointer_cast(), dynamic_pointer_cast(), shared_ptr< T[]>::operator[](), reinterpret_pointer_cast() , 以及 static_pointer_cast().

◆ operator bool()

template<typename T>
MSTL_NODISCARD shared_ptr< T >::operator bool ( ) const
inlineexplicitnoexcept

布尔转换运算符

返回
是否管理对象

在文件 shared_ptr.hpp562 行定义.

◆ operator*()

template<typename T>
MSTL_NODISCARD add_lvalue_reference_t< T > shared_ptr< T >::operator* ( ) const
inlinenoexcept

解引用运算符

返回
对象的左值引用

在文件 shared_ptr.hpp554 行定义.

◆ operator->()

template<typename T>
MSTL_NODISCARD T * shared_ptr< T >::operator-> ( ) const
inlinenoexcept

指针解引用运算符

返回
管理的对象指针

在文件 shared_ptr.hpp546 行定义.

◆ operator=() [1/2]

template<typename T>
shared_ptr & shared_ptr< T >::operator= ( const shared_ptr< T > & x)
inlinenoexcept

拷贝赋值运算符

参数
x要拷贝的共享指针
返回
当前共享指针的引用

在文件 shared_ptr.hpp354 行定义.

◆ operator=() [2/2]

template<typename T>
shared_ptr & shared_ptr< T >::operator= ( shared_ptr< T > && x)
inlinenoexcept

移动赋值运算符

参数
x要移动的共享指针
返回
当前共享指针的引用

在文件 shared_ptr.hpp389 行定义.

◆ owner_before()

template<typename T>
template<typename U>
MSTL_NODISCARD bool shared_ptr< T >::owner_before ( const shared_ptr< U > & rhs) const
inlinenoexcept

比较所有权顺序

模板参数
U比较的共享指针类型
参数
rhs要比较的共享指针
返回
当前控制块地址是否小于rhs的控制块地址

在文件 shared_ptr.hpp592 行定义.

◆ owner_equal()

template<typename T>
template<typename U>
MSTL_NODISCARD bool shared_ptr< T >::owner_equal ( const shared_ptr< U > & rhs) const
inlinenoexcept

检查所有权是否相等

模板参数
U比较的共享指针类型
参数
rhs要比较的共享指针
返回
是否共享同一控制块

在文件 shared_ptr.hpp573 行定义.

◆ reset() [1/2]

template<typename T>
template<typename U>
void shared_ptr< T >::reset ( U * ptr)
inline

重置共享指针并管理新对象

模板参数
U可转换为T*的类型
参数
ptr新的原始指针

在文件 shared_ptr.hpp482 行定义.

◆ reset() [2/2]

template<typename T>
template<typename U, typename Deleter>
void shared_ptr< T >::reset ( U * ptr,
Deleter deleter )
inline

带自定义删除器重置共享指针并管理新对象

模板参数
U可转换为T*的类型
Deleter删除器类型
参数
ptr新的原始指针
deleter删除器

在文件 shared_ptr.hpp499 行定义.

◆ swap()

template<typename T>
void shared_ptr< T >::swap ( shared_ptr< T > & x)
inlinenoexcept

交换两个共享指针

参数
x要交换的共享指针

在文件 shared_ptr.hpp528 行定义.

◆ unique()

template<typename T>
MSTL_NODISCARD bool shared_ptr< T >::unique ( ) const
inlinenoexcept

检查是否独占所有权

返回
是否只有当前共享指针引用对象

在文件 shared_ptr.hpp520 行定义.

◆ use_count()

template<typename T>
MSTL_NODISCARD long shared_ptr< T >::use_count ( ) const
inlinenoexcept

获取引用计数

返回
强引用计数

在文件 shared_ptr.hpp512 行定义.


该类的文档由以下文件生成: