std::out_ptr_t<Smart,Pointer,Args...>::out_ptr_t

来自cppreference.com
< cpp‎ | memory‎ | out ptr t
 
 
工具库
语言支持
类型支持(基本类型、RTTI)
库功能特性测试宏 (C++20)
动态内存管理
程序工具
协程支持 (C++20)
变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)

 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
垃圾收集器支持
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)



 
 
explicit out_ptr_t( Smart &sp, Args... args );
(1) (C++23 起)
out_ptr_t( const out_ptr_t& ) = delete;
(2) (C++23 起)
1) 创建 out_ptr_t。如同将 sp 绑定到 Smart& 成员一般适配它,如同用 std::forward<T>(t) 初始化对应的 Args... 中类型 T 的成员一般捕获 args... 中的实参 t,然后值初始化存储的 Pointer
然后若 sp.reset() 良构则调用它;否则若 std::is_default_constructible_v<Smart>true 则调用 sp = Smart()。若两种重置操作均为非良构,则程序非良构。
2) 复制构造函数被显示弃置。out_ptr_t 既不可复制又不可移动。

参数

sp - 要适配的对象(常为智能指针)
args... - 要捕获的用于重设的实参

返回值

(无)

异常

可能会抛出由实现定义的异常。

注解

构造后,任一转换函数的返回值所指向的 Pointervoid* 对象都等于 nullptr

args... 中的每个实参若拥有对象类型则被移动到创建的 out_ptr_t 中,而若拥有引用类型则保持原状转移到创建的 out_ptr_t 中。

允许 out_ptr_t 抛出异常。例如当 spstd::shared_ptr 时,新的控制块的分配可以在构造函数而非析构函数内进行。

示例