std::inout_ptr

来自cppreference.com
< cpp‎ | memory‎ | inout ptr t
 
 
工具库
通用工具
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)

初等字符串转换
(C++17)
(C++17)
栈踪
 
动态内存管理
智能指针
(C++11)
(C++11)
(C++11)
(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 前)
(C++11)(C++23 前)
杂项
(C++20)
(C++11)
(C++11)
C 库
低层内存管理
 
 
定义于头文件 <memory>
template< class Pointer = void, class Smart, class... Args >
auto inout_ptr( Smart& s, Args&&... args );
(C++23 起)

返回拥有被推导模板实参的 inout_ptr_t ,按引用绑定重设用的实参。

若返回值(见后述)的构造非良构则程序非良构。

参数

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

返回值

std::inout_ptr_t<Smart, P, Args&&>(s, std::forward<Args>(args)...) ,其中 P

  • Pointer ,若 Pointervoid 不同,
  • 否则为 Smart::pointer ,若它合法并指代类型,
  • 否则为 Smart::element_type* ,若 Smart::element_type 合法并指代类型,
  • 否则为 std::pointer_traits<Smart>::element_type*

注解

用户可对模板形参 Pointer 指定模板实参,以与接收 Pointer* 的外来函数交互。

由于所有实参都按引用捕获,返回的 inout_ptr_t 应为在含有外来函数调用的全表达式结尾销毁的临时对象,以避免悬垂引用。

示例

参阅

(C++23)
以关联的智能指针和重设参数创建 out_ptr_t
(函数模板)
创建管理一个新对象的独占指针
(函数模板)
创建管理一个新对象的共享指针
(函数模板)