diff options
| author | Andre Bogus <bogusandre@gmail.com> | 2019-07-12 22:13:48 +0200 |
|---|---|---|
| committer | Andre Bogus <bogusandre@gmail.com> | 2019-07-14 13:32:14 +0200 |
| commit | cb3aa4ce2c5de3ffb38afb2ca6d7cf19cb3e9be7 (patch) | |
| tree | 09b22087221f666c83403f687484113ae02127f5 | |
| parent | 71f9384e3bec467158a628e2d11e77ffada16a90 (diff) | |
| download | rust-cb3aa4ce2c5de3ffb38afb2ca6d7cf19cb3e9be7.tar.gz rust-cb3aa4ce2c5de3ffb38afb2ca6d7cf19cb3e9be7.zip | |
Less unsafe in the array example of MaybeUninit docs
| -rw-r--r-- | src/libcore/mem/maybe_uninit.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/libcore/mem/maybe_uninit.rs b/src/libcore/mem/maybe_uninit.rs index 407691662d1..f6f7ccffdb0 100644 --- a/src/libcore/mem/maybe_uninit.rs +++ b/src/libcore/mem/maybe_uninit.rs @@ -112,7 +112,6 @@ use crate::mem::ManuallyDrop; /// /// ``` /// use std::mem::{self, MaybeUninit}; -/// use std::ptr; /// /// let data = { /// // Create an uninitialized array of `MaybeUninit`. The `assume_init` is @@ -122,10 +121,13 @@ use crate::mem::ManuallyDrop; /// MaybeUninit::uninit().assume_init() /// }; /// -/// // Dropping a `MaybeUninit` does nothing, so if there is a panic during this loop, -/// // we have a memory leak, but there is no memory safety issue. +/// // Dropping a `MaybeUninit` does nothing. Thus using raw pointer +/// // assignment instead of `ptr::write` does not cause the old +/// // uninitialized value to be dropped. Also if there is a panic during +/// // this loop, we have a memory leak, but there is no memory safety +/// // issue. /// for elem in &mut data[..] { -/// unsafe { ptr::write(elem.as_mut_ptr(), vec![42]); } +/// *elem = MaybeUninit::new(vec![42]); /// } /// /// // Everything is initialized. Transmute the array to the @@ -151,7 +153,7 @@ use crate::mem::ManuallyDrop; /// let mut data_len: usize = 0; /// /// for elem in &mut data[0..500] { -/// unsafe { ptr::write(elem.as_mut_ptr(), String::from("hello")); } +/// *elem = MaybeUninit::new(String::from("hello")); /// data_len += 1; /// } /// |
