pub trait Pointee {
type Metadata: Copy + Send + Sync + Ord + Hash + Unpin;
}
🔬This is a nightly-only experimental API. (
ptr_metadata
#81513)Expand description
提供任何指向类型的指针元数据类型。
指针元数据
Rust 中的裸指针类型和引用类型可以认为是由两部分组成: 包含该值的内存地址和一些元数据的数据指针。
对于静态大小的类型 (实现 Sized
traits) 以及 extern
类型,指针被称为 thin
: 元数据的大小为零,其类型为 ()
。
指向 动态大小的类型 的指针被称为 wide
或 fat
,它们具有非零大小的元数据:
- 对于最后一个字段是 DST 的结构体,元数据是最后一个字段的元数据
- 对于
str
类型,元数据是usize
的长度 (以字节为单位) - 对于
[T]
之类的切片类型,元数据是usize
中项的长度 - 对于
dyn SomeTrait
之类的 trait 对象,元数据为DynMetadata<Self>
(例如DynMetadata<dyn SomeTrait>
)
在 future 中,Rust 语言可能会获得具有不同指针元数据的新型类型。
The Pointee
trait
这个 trait 的重点是它的 Metadata
关联类型,像上面讲的一样,它是 ()
或 usize
或 DynMetadata<_>
。
它会针对每种类型自动实现。
即使没有相应的限制,也可以假定它是在泛型上下文中实现的。
Usage
可以使用 to_raw_parts
方法将裸指针分解为数据地址和元数据组件。
或者,可以使用 metadata
函数单独提取元数据。
可以将引用传递给 metadata
并进行隐式强制。
可以使用 from_raw_parts
或 from_raw_parts_mut
将 (possibly-wide) 指针从其地址和元数据放回原处。