Trait std::ptr::Pointee

source ·
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: 元数据的大小为零,其类型为 ()

指向 动态大小的类型 的指针被称为 widefat,它们具有非零大小的元数据:

  • 对于最后一个字段是 DST 的结构体,元数据是最后一个字段的元数据
  • 对于 str 类型,元数据是 usize 的长度 (以字节为单位)
  • 对于 [T] 之类的切片类型,元数据是 usize 中项的长度
  • 对于 dyn SomeTrait 之类的 trait 对象,元数据为 DynMetadata<Self> (例如 DynMetadata<dyn SomeTrait>)

在 future 中,Rust 语言可能会获得具有不同指针元数据的新型类型。

The Pointee trait

这个 trait 的重点是它的 Metadata 关联类型,像上面讲的一样,它是 ()usizeDynMetadata<_>。 它会针对每种类型自动实现。 即使没有相应的限制,也可以假定它是在泛型上下文中实现的。

Usage

可以使用 to_raw_parts 方法将裸指针分解为数据地址和元数据组件。

或者,可以使用 metadata 函数单独提取元数据。 可以将引用传递给 metadata 并进行隐式强制。

可以使用 from_raw_partsfrom_raw_parts_mut 将 (possibly-wide) 指针从其地址和元数据放回原处。

Required Associated Types§

source

type Metadata: Copy + Send + Sync + Ord + Hash + Unpin

🔬This is a nightly-only experimental API. (ptr_metadata #81513)

指针中的元数据类型,并引用 Self

Implementors§