refactor Arc<T>::default

This commit is contained in:
Slanterns 2024-10-22 01:37:13 -07:00
parent 7782401c52
commit 0a963ab2da
No known key found for this signature in database
GPG Key ID: 1AA37EE7FAAE433A

View File

@ -3447,13 +3447,16 @@ impl<T: Default> Default for Arc<T> {
/// assert_eq!(*x, 0);
/// ```
fn default() -> Arc<T> {
let x = Box::into_raw(Box::write(Box::new_uninit(), ArcInner {
unsafe {
Self::from_inner(
Box::leak(Box::write(Box::new_uninit(), ArcInner {
strong: atomic::AtomicUsize::new(1),
weak: atomic::AtomicUsize::new(1),
data: T::default(),
}));
// SAFETY: `Box::into_raw` consumes the `Box` and never returns null
unsafe { Self::from_inner(NonNull::new_unchecked(x)) }
}))
.into(),
)
}
}
}