W3cubDocs

/Rust

Struct std::pin::PinBox

#[repr(transparent)]
pub struct PinBox<T> where    T: ?Sized,  { /* fields omitted */ }
🔬 This is a nightly-only experimental API. (pin #49150)

A pinned, heap allocated reference.

This type is similar to Box, except that it pins its value, which prevents it from moving out of the reference, unless it implements Unpin.

See the module documentation for furthur explaination on pinning.

Methods

impl<T> PinBox<T> [src]

🔬 This is a nightly-only experimental API. (pin #49150)

Allocate memory on the heap, move the data into it and pin it.

impl<T> PinBox<T> where
    T: ?Sized
[src]

🔬 This is a nightly-only experimental API. (pin #49150)

Get a pinned reference to the data in this PinBox.

🔬 This is a nightly-only experimental API. (pin #49150)

Constructs a PinBox from a raw pointer.

After calling this function, the raw pointer is owned by the resulting PinBox. Specifically, the PinBox destructor will call the destructor of T and free the allocated memory. Since the way PinBox allocates and releases memory is unspecified, the only valid pointer to pass to this function is the one taken from another PinBox via the PinBox::into_raw function.

This function is unsafe because improper use may lead to memory problems. For example, a double-free may occur if the function is called twice on the same raw pointer.

Examples

#![feature(pin)]
use std::pin::PinBox;
let x = PinBox::new(5);
let ptr = PinBox::into_raw(x);
let x = unsafe { PinBox::from_raw(ptr) };

🔬 This is a nightly-only experimental API. (pin #49150)

Consumes the PinBox, returning the wrapped raw pointer.

After calling this function, the caller is responsible for the memory previously managed by the PinBox. In particular, the caller should properly destroy T and release the memory. The proper way to do so is to convert the raw pointer back into a PinBox with the PinBox::from_raw function.

Note: this is an associated function, which means that you have to call it as PinBox::into_raw(b) instead of b.into_raw(). This is so that there is no conflict with a method on the inner type.

Examples

#![feature(pin)]
use std::pin::PinBox;
let x = PinBox::new(5);
let ptr = PinBox::into_raw(x);

ⓘImportant traits for &'a mut I
impl<'a, I> Iterator for &'a mut I where
    I: Iterator + ?Sized, 
    type Item = <I as Iterator>::Item;
impl<'a, R: Read + ?Sized> Read for &'a mut R
impl<'a, W: Write + ?Sized> Write for &'a mut W
🔬 This is a nightly-only experimental API. (pin #49150)

Get a mutable reference to the data inside this PinBox.

This function is unsafe. Users must guarantee that the data is never moved out of this reference.

ⓘImportant traits for Box<I>
impl<I> Iterator for Box<I> where
    I: Iterator + ?Sized, 
    type Item = <I as Iterator>::Item;
impl<R: Read + ?Sized> Read for Box<R>
impl<W: Write + ?Sized> Write for Box<W>
🔬 This is a nightly-only experimental API. (pin #49150)

Convert this PinBox into an unpinned Box.

This function is unsafe. Users must guarantee that the data is never moved out of the box.

Trait Implementations

impl<'a, T, F> UnsafeFutureObj<'a, T> for PinBox<F> where
    F: Future<Output = T> + 'a, 
[src]

🔬 This is a nightly-only experimental API. (futures_api #50547)futures in libcore are unstable

Convert an owned instance into a (conceptually owned) void pointer.

🔬 This is a nightly-only experimental API. (futures_api #50547)futures in libcore are unstable

Poll the future represented by the given void pointer. Read more

🔬 This is a nightly-only experimental API. (futures_api #50547)futures in libcore are unstable

Drops the future represented by the given void pointer. Read more

impl<T> Deref for PinBox<T> where
    T: ?Sized
[src]

The resulting type after dereferencing.

ⓘImportant traits for &'a mut I
impl<'a, I> Iterator for &'a mut I where
    I: Iterator + ?Sized, 
    type Item = <I as Iterator>::Item;
impl<'a, R: Read + ?Sized> Read for &'a mut R
impl<'a, W: Write + ?Sized> Write for &'a mut W

Dereferences the value.

impl<T> DerefMut for PinBox<T> where
    T: Unpin + ?Sized
[src]

ⓘImportant traits for &'a mut I
impl<'a, I> Iterator for &'a mut I where
    I: Iterator + ?Sized, 
    type Item = <I as Iterator>::Item;
impl<'a, R: Read + ?Sized> Read for &'a mut R
impl<'a, W: Write + ?Sized> Write for &'a mut W

Mutably dereferences the value.

impl<T> Unpin for PinBox<T> where
    T: ?Sized
[src]

impl<T> Display for PinBox<T> where
    T: Display + ?Sized
[src]

Formats the value using the given formatter. Read more

impl<T> From<Box<T>> for PinBox<T> where
    T: ?Sized
[src]

Performs the conversion.

impl<'a, F> From<PinBox<F>> for LocalFutureObj<'a, ()> where
    F: 'a + Future<Output = ()>, 
[src]

Performs the conversion.

impl<T> From<PinBox<T>> for Box<T> where
    T: Unpin + ?Sized
[src]

ⓘImportant traits for Box<I>
impl<I> Iterator for Box<I> where
    I: Iterator + ?Sized, 
    type Item = <I as Iterator>::Item;
impl<R: Read + ?Sized> Read for Box<R>
impl<W: Write + ?Sized> Write for Box<W>

Performs the conversion.

impl<'a, F> From<PinBox<F>> for FutureObj<'a, ()> where
    F: 'a + Send + Future<Output = ()>, 
[src]

Performs the conversion.

impl<F> Future for PinBox<F> where
    F: Future + ?Sized
[src]

🔬 This is a nightly-only experimental API. (futures_api #50547)futures in libcore are unstable

The result of the Future.

🔬 This is a nightly-only experimental API. (futures_api #50547)futures in libcore are unstable

Attempt to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more

impl<T> Debug for PinBox<T> where
    T: Debug + ?Sized
[src]

Formats the value using the given formatter. Read more

impl<T, U> CoerceUnsized<PinBox<U>> for PinBox<T> where
    T: Unsize<U> + ?Sized,
    U: ?Sized
[src]

impl<T> Pointer for PinBox<T> where
    T: ?Sized
[src]

Formats the value using the given formatter.

Auto Trait Implementations

impl<T: ?Sized> Send for PinBox<T> where
    T: Send

impl<T: ?Sized> Sync for PinBox<T> where
    T: Sync

Blanket Implementations

impl<T, U> TryFrom for T where
    T: From<U>, 
[src]

🔬 This is a nightly-only experimental API. (try_from #33417)

The type returned in the event of a conversion error.

🔬 This is a nightly-only experimental API. (try_from #33417)

Performs the conversion.

impl<T> From for T [src]

Performs the conversion.

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

🔬 This is a nightly-only experimental API. (try_from #33417)

The type returned in the event of a conversion error.

🔬 This is a nightly-only experimental API. (try_from #33417)

Performs the conversion.

impl<T, U> Into for T where
    U: From<T>, 
[src]

Performs the conversion.

impl<T> Borrow for T where
    T: ?Sized
[src]

ⓘImportant traits for &'a mut I
impl<'a, I> Iterator for &'a mut I where
    I: Iterator + ?Sized, 
    type Item = <I as Iterator>::Item;
impl<'a, R: Read + ?Sized> Read for &'a mut R
impl<'a, W: Write + ?Sized> Write for &'a mut W

Immutably borrows from an owned value. Read more

impl<T> BorrowMut for T where
    T: ?Sized
[src]

ⓘImportant traits for &'a mut I
impl<'a, I> Iterator for &'a mut I where
    I: Iterator + ?Sized, 
    type Item = <I as Iterator>::Item;
impl<'a, R: Read + ?Sized> Read for &'a mut R
impl<'a, W: Write + ?Sized> Write for &'a mut W

Mutably borrows from an owned value. Read more

impl<T> Any for T where
    T: 'static + ?Sized
[src]

🔬 This is a nightly-only experimental API. (get_type_id #27745)this method will likely be replaced by an associated static

Gets the TypeId of self. Read more

impl<T> ToString for T where
    T: Display + ?Sized
[src]

Converts the given value to a String. Read more

© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/pin/struct.PinBox.html