Improve documentation for constructors of pinned Box
es
This commit is contained in:
parent
9598b4b594
commit
6e2ac5df31
@ -266,8 +266,13 @@ impl<T> Box<T> {
|
|||||||
Self::new_zeroed_in(Global)
|
Self::new_zeroed_in(Global)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Constructs a new `Pin<Box<T>>`. If `T` does not implement `Unpin`, then
|
/// Constructs a new `Pin<Box<T>>`. If `T` does not implement [`Unpin`], then
|
||||||
/// `x` will be pinned in memory and unable to be moved.
|
/// `x` will be pinned in memory and unable to be moved.
|
||||||
|
///
|
||||||
|
/// Constructing and pinning of the `Box` can also be done in two steps: `Box::pin(x)`
|
||||||
|
/// does the same as <code>[Box::into_pin]\([Box::new]\(x))</code>. Consider using
|
||||||
|
/// [`into_pin`](Box::into_pin) if you already have a `Box<T>`, or if you want to
|
||||||
|
/// construct a (pinned) `Box` in a different way than with [`Box::new`].
|
||||||
#[cfg(not(no_global_oom_handling))]
|
#[cfg(not(no_global_oom_handling))]
|
||||||
#[stable(feature = "pin", since = "1.33.0")]
|
#[stable(feature = "pin", since = "1.33.0")]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
@ -553,8 +558,13 @@ impl<T, A: Allocator> Box<T, A> {
|
|||||||
unsafe { Ok(Box::from_raw_in(ptr.as_ptr(), alloc)) }
|
unsafe { Ok(Box::from_raw_in(ptr.as_ptr(), alloc)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Constructs a new `Pin<Box<T, A>>`. If `T` does not implement `Unpin`, then
|
/// Constructs a new `Pin<Box<T, A>>`. If `T` does not implement [`Unpin`], then
|
||||||
/// `x` will be pinned in memory and unable to be moved.
|
/// `x` will be pinned in memory and unable to be moved.
|
||||||
|
///
|
||||||
|
/// Constructing and pinning of the `Box` can also be done in two steps: `Box::pin_in(x, alloc)`
|
||||||
|
/// does the same as <code>[Box::into_pin]\([Box::new_in]\(x, alloc))</code>. Consider using
|
||||||
|
/// [`into_pin`](Box::into_pin) if you already have a `Box<T, A>`, or if you want to
|
||||||
|
/// construct a (pinned) `Box` in a different way than with [`Box::new_in`].
|
||||||
#[cfg(not(no_global_oom_handling))]
|
#[cfg(not(no_global_oom_handling))]
|
||||||
#[unstable(feature = "allocator_api", issue = "32838")]
|
#[unstable(feature = "allocator_api", issue = "32838")]
|
||||||
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
|
#[rustc_const_unstable(feature = "const_box", issue = "92521")]
|
||||||
@ -1170,12 +1180,18 @@ impl<T: ?Sized, A: Allocator> Box<T, A> {
|
|||||||
unsafe { &mut *mem::ManuallyDrop::new(b).0.as_ptr() }
|
unsafe { &mut *mem::ManuallyDrop::new(b).0.as_ptr() }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts a `Box<T>` into a `Pin<Box<T>>`
|
/// Converts a `Box<T>` into a `Pin<Box<T>>`. If `T` does not implement [`Unpin`], then
|
||||||
|
/// `*boxed` will be pinned in memory and unable to be moved.
|
||||||
///
|
///
|
||||||
/// This conversion does not allocate on the heap and happens in place.
|
/// This conversion does not allocate on the heap and happens in place.
|
||||||
///
|
///
|
||||||
/// This is also available via [`From`].
|
/// This is also available via [`From`].
|
||||||
///
|
///
|
||||||
|
/// Constructing and pinning a `Box` with <code>Box::into_pin([Box::new]\(x))</code>
|
||||||
|
/// can also be written more concisely using <code>[Box::pin]\(x)</code>.
|
||||||
|
/// This `into_pin` method is useful if you already have a `Box<T>`, or you are
|
||||||
|
/// constructing a (pinned) `Box` in a different way than with [`Box::new`].
|
||||||
|
///
|
||||||
/// # Notes
|
/// # Notes
|
||||||
///
|
///
|
||||||
/// It's not recommended that crates add an impl like `From<Box<T>> for Pin<T>`,
|
/// It's not recommended that crates add an impl like `From<Box<T>> for Pin<T>`,
|
||||||
@ -1437,9 +1453,17 @@ impl<T: ?Sized, A: Allocator> const From<Box<T, A>> for Pin<Box<T, A>>
|
|||||||
where
|
where
|
||||||
A: 'static,
|
A: 'static,
|
||||||
{
|
{
|
||||||
/// Converts a `Box<T>` into a `Pin<Box<T>>`
|
/// Converts a `Box<T>` into a `Pin<Box<T>>`. If `T` does not implement [`Unpin`], then
|
||||||
|
/// `*boxed` will be pinned in memory and unable to be moved.
|
||||||
///
|
///
|
||||||
/// This conversion does not allocate on the heap and happens in place.
|
/// This conversion does not allocate on the heap and happens in place.
|
||||||
|
///
|
||||||
|
/// This is also available via [`Box::into_pin`].
|
||||||
|
///
|
||||||
|
/// Constructing and pinning a `Box` with <code><Pin<Box\<T>>>::from([Box::new]\(x))</code>
|
||||||
|
/// can also be written more concisely using <code>[Box::pin]\(x)</code>.
|
||||||
|
/// This `From` implementation is useful if you already have a `Box<T>`, or you are
|
||||||
|
/// constructing a (pinned) `Box` in a different way than with [`Box::new`].
|
||||||
fn from(boxed: Box<T, A>) -> Self {
|
fn from(boxed: Box<T, A>) -> Self {
|
||||||
Box::into_pin(boxed)
|
Box::into_pin(boxed)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user