> + /// 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 <[email protected]>