DynMetadata in std::ptr - Rust (original) (raw)

pub struct DynMetadata<Dyn>

where
    Dyn: ?Sized,

{ /* private fields */ }

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

Expand description

The metadata for a Dyn = dyn SomeTrait trait object type.

It is a pointer to a vtable (virtual call table) that represents all the necessary information to manipulate the concrete type stored inside a trait object. The vtable notably contains:

Note that the first three are special because they’re necessary to allocate, drop, and deallocate any trait object.

It is possible to name this struct with a type parameter that is not a dyn trait object (for example DynMetadata<u64>) but not to obtain a meaningful value of that struct.

Note that while this type implements PartialEq, comparing vtable pointers is unreliable: pointers to vtables of the same type for the same trait can compare inequal (because vtables are duplicated in multiple codegen units), and pointers to vtables of different types/traits can compare equal (since identical vtables can be deduplicated within a codegen unit).

Source§

Source

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

Returns the size of the type associated with this vtable.

Source

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

Returns the alignment of the type associated with this vtable.

Source

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

Returns the size and alignment together as a Layout