> + /// Creates a new opaque object with zeroed contents. > + /// > + /// # Safety > + /// > + /// Ultimately the pointer to the returned value will be dereferenced > + /// in another unsafe block, for example when passing it to a C function. > + /// However, this function is unsafe to "force" documenting whether a > + /// zero value is safe. > + pub const unsafe fn zeroed() -> Self { > + Self { > + value: UnsafeCell::new(MaybeUninit::uninit()),
typo? MaybeUninit::zeroed() > + _pin: PhantomPinned, > + } > + } > + > + /// Returns a raw pointer to the opaque data. Maybe "a raw mutable pointer". > + pub const fn as_mut_ptr(&self) -> *mut T { > + UnsafeCell::get(&self.value).cast() > + } > + > + /// Returns a raw pointer to the opaque data. > + pub const fn as_ptr(&self) -> *const T { > + self.as_mut_ptr() as *const _ > + } > + > + /// Returns a raw pointer to the opaque data. What about "Returns a raw c_void type pointer"? (Because the descriptions of these three helpers are exactly the same! We can make them different.) zeroed > + pub const fn as_void_ptr(&self) -> *mut std::ffi::c_void { > + UnsafeCell::get(&self.value).cast() > + } > +} The whole idea is great! With the nit of zeroed fixed, Reviewed-by: Zhao Liu <zhao1....@intel.com>