pub trait Pointer {
// Required method
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>;
}Expand description
p formatting.
The Pointer trait should format its output as a memory location. This is commonly presented
as hexadecimal. For more information on formatters, see the module-level documentation.
Printing of pointers is not a reliable way to discover how Rust programs are implemented. The act of reading an address changes the program itself, and may change how the data is represented in memory, and may affect which optimizations are applied to the code.
The printed pointer values are not guaranteed to be stable nor unique identifiers of objects. Rust allows moving values to different memory locations, and may reuse the same memory locations for different purposes.
There is no guarantee that the printed value can be converted back to a pointer.
§Examples
Basic usage with &i32:
let x = &42;
let address = format!("{x:p}"); // this produces something like '0x7f06092ac6d0'Implementing Pointer on a type:
use std::fmt;
struct Length(i32);
impl fmt::Pointer for Length {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
// use `as` to convert to a `*const T`, which implements Pointer, which we can use
let ptr = self as *const Self;
fmt::Pointer::fmt(&ptr, f)
}
}
let l = Length(42);
println!("l is in memory here: {l:p}");
let l_ptr = format!("{l:018p}");
assert_eq!(l_ptr.len(), 18);
assert_eq!(&l_ptr[..2], "0x");Required Methods§
1.0.0 · Sourcefn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Formats the value using the given formatter.
§Errors
This function should return Err if, and only if, the provided Formatter returns Err.
String formatting is considered an infallible operation; this function only
returns a Result because writing to the underlying stream might fail and it must
provide a way to propagate the fact that an error has occurred back up the stack.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
impl Pointer for AccelerationStructureKHR
impl Pointer for AccelerationStructureNV
impl Pointer for Buffer
impl Pointer for BufferView
impl Pointer for CommandBuffer
impl Pointer for CommandPool
impl Pointer for CuFunctionNVX
impl Pointer for CuModuleNVX
impl Pointer for DebugReportCallbackEXT
impl Pointer for DebugUtilsMessengerEXT
impl Pointer for DeferredOperationKHR
impl Pointer for DescriptorPool
impl Pointer for DescriptorSet
impl Pointer for DescriptorSetLayout
impl Pointer for DescriptorUpdateTemplate
impl Pointer for Device
impl Pointer for DeviceMemory
impl Pointer for DisplayKHR
impl Pointer for DisplayModeKHR
impl Pointer for Event
impl Pointer for Fence
impl Pointer for Framebuffer
impl Pointer for GpaSessionAmd
impl Pointer for Image
impl Pointer for ImageView
impl Pointer for IndirectCommandsLayoutNV
impl Pointer for Instance
impl Pointer for PerformanceConfigurationINTEL
impl Pointer for PhysicalDevice
impl Pointer for Pipeline
impl Pointer for PipelineCache
impl Pointer for PipelineLayout
impl Pointer for PrivateDataSlotEXT
impl Pointer for QueryPool
impl Pointer for Queue
impl Pointer for RenderPass
impl Pointer for Sampler
impl Pointer for SamplerYcbcrConversion
impl Pointer for Semaphore
impl Pointer for ShaderModule
impl Pointer for SurfaceKHR
impl Pointer for SwapchainKHR
impl Pointer for ValidationCacheEXT
impl Pointer for VideoSessionKHR
impl Pointer for VideoSessionParametersKHR
impl<F> Pointer for Fwhere
F: FnPtr,
impl<Ptr> Pointer for Pin<Ptr>where
Ptr: Pointer,
impl<T, A> Pointer for Arc<T, A>
impl<T, A> Pointer for Box<T, A>
impl<T, A> Pointer for Rc<T, A>
impl<T, A> Pointer for UniqueArc<T, A>
impl<T, A> Pointer for UniqueRc<T, A>
impl<T> Pointer for &Twhere
T: ?Sized,
impl<T> Pointer for &mut Twhere
T: ?Sized,
impl<T> Pointer for *const Twhere
T: ?Sized,
impl<T> Pointer for *mut Twhere
T: ?Sized,
impl<T> Pointer for core::sync::atomic::Atomic<*mut T>
target_has_atomic_load_store=ptr only.