Trait core::ptr::Pointee [−][src]
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) 指针从其地址和元数据放回原处。