std::out_ptr_t<Smart,Pointer,Args...>::operator Pointer*, std::out_ptr_t<Smart,Pointer,Args...>::operator void**
来自cppreference.com
工具库
动态内存管理
|
std::out_ptr_t
成员函数 | ||||
(C++23)
|
||||
(C++23)
|
||||
out_ptr_t::operator
Pointer*out_ptr_t::operator
void**
(C++23)(C++23)
|
||||
非成员函数 | ||||
(C++23)
|
operator
Pointer*()
const
noexcept;
|
(1) | (C++23 起) |
operator
void**()
const
noexcept;
|
(2) | (C++23 起) |
暴露 Pointer
或 void*
对象的地址给一般会重初始化它的外来函数。
1) 转换 *this 为存储的
Pointer
对象的地址。2) 转换 *this 为 void* 对象的地址。此转换函数仅若
void* 对象的初值等于存储的
Pointer
与 void* 不同才参与重载决议,而若
Pointer
不是指针类型则程序非良构。void* 对象的初值等于存储的
Pointer
对象的值转换到 void*
,而任何对它的修改影响用于析构函数的
Pointer
值。在 *this 的生存期外访问该
void* 拥有未定义行为。
一旦在一个 out_ptr_t
对象上调用了此二转换函数之一,则不应当调用另一个,否则行为未定义。
参数
(无)
返回值
1) 存储的
Pointer
对象的地址。
2) 满足前述要求的 void* 对象的地址。
注解
若返回值所指向的对象未被写入,则它等于 nullptr 。
常见实现上,每个作为指针类型的 Pointer
对象表示均与 void* 的兼容,从而这些实现常在
Pointer
对象的存储内存储该 void* 对象,不需要额外存储:
- 若实现启用基于类型的别名分析(依赖严格别名化规则),则可以使用正确对齐的 std::byte[sizeof(void*)] 成员子对象,而两个转换函数都返回在该数组内隐式创建的对象的地址。
- 否则,可将
Pointer
成员子对象用于两个转换函数,而 (2) 可以直接返回 reinterpret_cast 成 void** 的其地址。
若 Pointer
是对象表示与 void*
的不兼容的指针类型,则可能需要额外的 bool 标志记录是否调用了
(1) (或 (2) )。
示例
本节未完成 原因:暂无示例 |