跳到主要内容

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

自 C++23 起
// 1)
explicit inout_ptr_t( Smart &sp, Args... args );
// 2)
inout_ptr_t( const inout_ptr_t& ) = delete;

创建一个 inout_ptr_t。将 sp 适配为如同将其绑定到 Smart& 成员,捕获 args... 中的每个参数 t,如同使用 std::forward<T>(t) 初始化 Args... 中类型为 T 的相应成员,然后如果 Smart 是指针类型,则使用 sp 初始化存储的 Pointer,否则,使用 sp.get() 初始化。如果 Smart 不是指针类型,可能会在析构函数中调用 sp.release(),在这种情况下,析构函数中将不再调用它。


拷贝构造函数被显式删除。 inout_ptr_t 不可拷贝也不可移动。

参数

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

返回值

(无)

异常

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

备注

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

如果 args... 中的每个参数是对象类型,则它们会被移动到创建的 inout_ptr_t 中,或者如果它们是引用类型,则会原样传递到创建的 inout_ptr_t 中。

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

示例

本节不完整

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

自 C++23 起
// 1)
explicit inout_ptr_t( Smart &sp, Args... args );
// 2)
inout_ptr_t( const inout_ptr_t& ) = delete;

创建一个 inout_ptr_t。将 sp 适配为如同将其绑定到 Smart& 成员,捕获 args... 中的每个参数 t,如同使用 std::forward<T>(t) 初始化 Args... 中类型为 T 的相应成员,然后如果 Smart 是指针类型,则使用 sp 初始化存储的 Pointer,否则,使用 sp.get() 初始化。如果 Smart 不是指针类型,可能会在析构函数中调用 sp.release(),在这种情况下,析构函数中将不再调用它。


拷贝构造函数被显式删除。 inout_ptr_t 不可拷贝也不可移动。

参数

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

返回值

(无)

异常

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

备注

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

如果 args... 中的每个参数是对象类型,则它们会被移动到创建的 inout_ptr_t 中,或者如果它们是引用类型,则会原样传递到创建的 inout_ptr_t 中。

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

示例

本节不完整