Namespaces
Variants

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

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
explicit inout_ptr_t ( Smart & sp, Args... args ) ;
(1) (自 C++23 起)
inout_ptr_t ( const inout_ptr_t & ) = delete ;
(2) (自 C++23 起)
1) 创建 inout_ptr_t 对象。将 sp 适配为绑定到 Smart & 成员,捕获 args... 中的每个参数 t 并如同使用 std:: forward < T > ( t ) 初始化 Args... 中对应类型为 T 的成员,随后若 Smart 为指针类型则使用 sp 初始化存储的 Pointer ,否则使用 sp. get ( ) 进行初始化。若 Smart 非指针类型可能调用 sp. release ( ) ,在此情况下析构函数内不会再次调用该操作。
2) 复制构造函数被显式删除。 inout_ptr_t 既不可复制也不可移动。

目录

参数

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

返回值

(无)

异常

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

注释

如果 Smart 不是指针类型且构造函数未调用 sp. release ( ) ,则可能在重置 sp 之前由析构函数调用。

如果 args... 中的参数是对象类型,则会被移动到创建的 inout_ptr_t 中;如果是引用类型,则会按原样转移到创建的 inout_ptr_t 中。

inout_ptr_t 的构造函数允许抛出异常。例如,当 sp 是一个带有控制块的侵入式指针时,新控制块的分配可能在构造函数内执行,而非在析构函数中执行。

示例