diff options
| author | Slanterns <slanterns.w@gmail.com> | 2024-10-22 01:37:13 -0700 |
|---|---|---|
| committer | Slanterns <slanterns.w@gmail.com> | 2024-10-22 02:25:48 -0700 |
| commit | 0a963ab2da139b177ef1e7f09efed7e4e1e8e930 (patch) | |
| tree | 97456eca25385597a59111a7bb5a6a3df23d7199 | |
| parent | 7782401c520ab1e744dbcf58d0f0254672da9026 (diff) | |
| download | rust-0a963ab2da139b177ef1e7f09efed7e4e1e8e930.tar.gz rust-0a963ab2da139b177ef1e7f09efed7e4e1e8e930.zip | |
refactor `Arc<T>::default`
| -rw-r--r-- | library/alloc/src/sync.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/library/alloc/src/sync.rs b/library/alloc/src/sync.rs index acbc325a514..13677245e98 100644 --- a/library/alloc/src/sync.rs +++ b/library/alloc/src/sync.rs @@ -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 { - 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)) } + 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(), + })) + .into(), + ) + } } } |
