Struct nom::lib::std::boxed::Box 1.0.0[−][src]
A pointer type for heap allocation.
See the module-level documentation for more.
Implementations
impl<T> Box<T, Global>
[src][−]
pub fn new(x: T) -> Box<T, Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
Allocates memory on the heap and then places x
into it.
This doesn’t actually allocate if T
is zero-sized.
Examples
let five = Box::new(5);
pub fn new_uninit() -> Box<MaybeUninit<T>, Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
new_uninit
)Constructs a new box with uninitialized contents.
Examples
#![feature(new_uninit)] let mut five = Box::<u32>::new_uninit(); let five = unsafe { // Deferred initialization: five.as_mut_ptr().write(5); five.assume_init() }; assert_eq!(*five, 5)
pub fn new_zeroed() -> Box<MaybeUninit<T>, Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
new_uninit
)Constructs a new Box
with uninitialized contents, with the memory
being filled with 0
bytes.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
Examples
#![feature(new_uninit)] let zero = Box::<u32>::new_zeroed(); let zero = unsafe { zero.assume_init() }; assert_eq!(*zero, 0)
pub fn pin(x: T) -> Pin<Box<T, Global>>
1.33.0[src][−]
Constructs a new Pin<Box<T>>
. If T
does not implement Unpin
, then
x
will be pinned in memory and unable to be moved.
pub fn try_new(x: T) -> Result<Box<T, Global>, AllocError>
[src][−]
allocator_api
)Allocates memory on the heap then places x
into it,
returning an error if the allocation fails
This doesn’t actually allocate if T
is zero-sized.
Examples
#![feature(allocator_api)] let five = Box::try_new(5)?;
pub fn try_new_uninit() -> Result<Box<MaybeUninit<T>, Global>, AllocError>
[src][−]
allocator_api
)Constructs a new box with uninitialized contents on the heap, returning an error if the allocation fails
Examples
#![feature(allocator_api, new_uninit)] let mut five = Box::<u32>::try_new_uninit()?; let five = unsafe { // Deferred initialization: five.as_mut_ptr().write(5); five.assume_init() }; assert_eq!(*five, 5);
pub fn try_new_zeroed() -> Result<Box<MaybeUninit<T>, Global>, AllocError>
[src][−]
allocator_api
)Constructs a new Box
with uninitialized contents, with the memory
being filled with 0
bytes on the heap
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
Examples
#![feature(allocator_api, new_uninit)] let zero = Box::<u32>::try_new_zeroed()?; let zero = unsafe { zero.assume_init() }; assert_eq!(*zero, 0);
impl<T, A> Box<T, A> where
A: Allocator,
[src][−]
A: Allocator,
pub fn new_in(x: T, alloc: A) -> Box<T, A>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
allocator_api
)Allocates memory in the given allocator then places x
into it.
This doesn’t actually allocate if T
is zero-sized.
Examples
#![feature(allocator_api)] use std::alloc::System; let five = Box::new_in(5, System);
pub fn try_new_in(x: T, alloc: A) -> Result<Box<T, A>, AllocError>
[src][−]
allocator_api
)Allocates memory in the given allocator then places x
into it,
returning an error if the allocation fails
This doesn’t actually allocate if T
is zero-sized.
Examples
#![feature(allocator_api)] use std::alloc::System; let five = Box::try_new_in(5, System)?;
pub fn new_uninit_in(alloc: A) -> Box<MaybeUninit<T>, A>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
allocator_api
)Constructs a new box with uninitialized contents in the provided allocator.
Examples
#![feature(allocator_api, new_uninit)] use std::alloc::System; let mut five = Box::<u32, _>::new_uninit_in(System); let five = unsafe { // Deferred initialization: five.as_mut_ptr().write(5); five.assume_init() }; assert_eq!(*five, 5)
pub fn try_new_uninit_in(alloc: A) -> Result<Box<MaybeUninit<T>, A>, AllocError>
[src][−]
allocator_api
)Constructs a new box with uninitialized contents in the provided allocator, returning an error if the allocation fails
Examples
#![feature(allocator_api, new_uninit)] use std::alloc::System; let mut five = Box::<u32, _>::try_new_uninit_in(System)?; let five = unsafe { // Deferred initialization: five.as_mut_ptr().write(5); five.assume_init() }; assert_eq!(*five, 5);
pub fn new_zeroed_in(alloc: A) -> Box<MaybeUninit<T>, A>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
allocator_api
)Constructs a new Box
with uninitialized contents, with the memory
being filled with 0
bytes in the provided allocator.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
Examples
#![feature(allocator_api, new_uninit)] use std::alloc::System; let zero = Box::<u32, _>::new_zeroed_in(System); let zero = unsafe { zero.assume_init() }; assert_eq!(*zero, 0)
pub fn try_new_zeroed_in(alloc: A) -> Result<Box<MaybeUninit<T>, A>, AllocError>
[src][−]
allocator_api
)Constructs a new Box
with uninitialized contents, with the memory
being filled with 0
bytes in the provided allocator,
returning an error if the allocation fails,
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
Examples
#![feature(allocator_api, new_uninit)] use std::alloc::System; let zero = Box::<u32, _>::try_new_zeroed_in(System)?; let zero = unsafe { zero.assume_init() }; assert_eq!(*zero, 0);
pub fn pin_in(x: T, alloc: A) -> Pin<Box<T, A>> where
A: 'static,
[src][−]
A: 'static,
allocator_api
)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.
pub fn into_boxed_slice(boxed: Box<T, A>) -> Box<[T], A>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
box_into_boxed_slice
)Converts a Box<T>
into a Box<[T]>
This conversion does not allocate on the heap and happens in place.
pub fn into_inner(boxed: Box<T, A>) -> T
[src][−]
box_into_inner
)Consumes the Box
, returning the wrapped value.
Examples
#![feature(box_into_inner)] let c = Box::new(5); assert_eq!(Box::into_inner(c), 5);
impl<T> Box<[T], Global>
[src][−]
pub fn new_uninit_slice(len: usize) -> Box<[MaybeUninit<T>], Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
new_uninit
)Constructs a new boxed slice with uninitialized contents.
Examples
#![feature(new_uninit)] let mut values = Box::<[u32]>::new_uninit_slice(3); let values = unsafe { // Deferred initialization: values[0].as_mut_ptr().write(1); values[1].as_mut_ptr().write(2); values[2].as_mut_ptr().write(3); values.assume_init() }; assert_eq!(*values, [1, 2, 3])
pub fn new_zeroed_slice(len: usize) -> Box<[MaybeUninit<T>], Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
new_uninit
)Constructs a new boxed slice with uninitialized contents, with the memory
being filled with 0
bytes.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
Examples
#![feature(new_uninit)] let values = Box::<[u32]>::new_zeroed_slice(3); let values = unsafe { values.assume_init() }; assert_eq!(*values, [0, 0, 0])
impl<T, A> Box<[T], A> where
A: Allocator,
[src][−]
A: Allocator,
pub fn new_uninit_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit<T>], A>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
allocator_api
)Constructs a new boxed slice with uninitialized contents in the provided allocator.
Examples
#![feature(allocator_api, new_uninit)] use std::alloc::System; let mut values = Box::<[u32], _>::new_uninit_slice_in(3, System); let values = unsafe { // Deferred initialization: values[0].as_mut_ptr().write(1); values[1].as_mut_ptr().write(2); values[2].as_mut_ptr().write(3); values.assume_init() }; assert_eq!(*values, [1, 2, 3])
pub fn new_zeroed_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit<T>], A>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
allocator_api
)Constructs a new boxed slice with uninitialized contents in the provided allocator,
with the memory being filled with 0
bytes.
See MaybeUninit::zeroed
for examples of correct and incorrect usage
of this method.
Examples
#![feature(allocator_api, new_uninit)] use std::alloc::System; let values = Box::<[u32], _>::new_zeroed_slice_in(3, System); let values = unsafe { values.assume_init() }; assert_eq!(*values, [0, 0, 0])
impl<T, A> Box<MaybeUninit<T>, A> where
A: Allocator,
[src][−]
A: Allocator,
pub unsafe fn assume_init(self) -> Box<T, A>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
new_uninit
)Converts to Box<T, A>
.
Safety
As with MaybeUninit::assume_init
,
it is up to the caller to guarantee that the value
really is in an initialized state.
Calling this when the content is not yet fully initialized
causes immediate undefined behavior.
Examples
#![feature(new_uninit)] let mut five = Box::<u32>::new_uninit(); let five: Box<u32> = unsafe { // Deferred initialization: five.as_mut_ptr().write(5); five.assume_init() }; assert_eq!(*five, 5)
impl<T, A> Box<[MaybeUninit<T>], A> where
A: Allocator,
[src][−]
A: Allocator,
pub unsafe fn assume_init(self) -> Box<[T], A>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
new_uninit
)Converts to Box<[T], A>
.
Safety
As with MaybeUninit::assume_init
,
it is up to the caller to guarantee that the values
really are in an initialized state.
Calling this when the content is not yet fully initialized
causes immediate undefined behavior.
Examples
#![feature(new_uninit)] let mut values = Box::<[u32]>::new_uninit_slice(3); let values = unsafe { // Deferred initialization: values[0].as_mut_ptr().write(1); values[1].as_mut_ptr().write(2); values[2].as_mut_ptr().write(3); values.assume_init() }; assert_eq!(*values, [1, 2, 3])
impl<T> Box<T, Global> where
T: ?Sized,
[src][−]
T: ?Sized,
pub unsafe fn from_raw(raw: *mut T) -> Box<T, Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
1.4.0[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
Constructs a box from a raw pointer.
After calling this function, the raw pointer is owned by the
resulting Box
. Specifically, the Box
destructor will call
the destructor of T
and free the allocated memory. For this
to be safe, the memory must have been allocated in accordance
with the memory layout used by Box
.
Safety
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.
The safety conditions are described in the memory layout section.
Examples
Recreate a Box
which was previously converted to a raw pointer
using Box::into_raw
:
let x = Box::new(5); let ptr = Box::into_raw(x); let x = unsafe { Box::from_raw(ptr) };
Manually create a Box
from scratch by using the global allocator:
use std::alloc::{alloc, Layout}; unsafe { let ptr = alloc(Layout::new::<i32>()) as *mut i32; // In general .write is required to avoid attempting to destruct // the (uninitialized) previous contents of `ptr`, though for this // simple example `*ptr = 5` would have worked as well. ptr.write(5); let x = Box::from_raw(ptr); }
impl<T, A> Box<T, A> where
T: ?Sized,
A: Allocator,
[src][−]
T: ?Sized,
A: Allocator,
pub unsafe fn from_raw_in(raw: *mut T, alloc: A) -> Box<T, A>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src][−]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
allocator_api
)Constructs a box from a raw pointer in the given allocator.
After calling this function, the raw pointer is owned by the
resulting Box
. Specifically, the Box
destructor will call
the destructor of T
and free the allocated memory. For this
to be safe, the memory must have been allocated in accordance
with the memory layout used by Box
.
Safety
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
Recreate a Box
which was previously converted to a raw pointer
using Box::into_raw_with_allocator
:
#![feature(allocator_api)] use std::alloc::System; let x = Box::new_in(5, System); let (ptr, alloc) = Box::into_raw_with_allocator(x); let x = unsafe { Box::from_raw_in(ptr, alloc) };
Manually create a Box
from scratch by using the system allocator:
#![feature(allocator_api, slice_ptr_get)] use std::alloc::{Allocator, Layout, System}; unsafe { let ptr = System.allocate(Layout::new::<i32>())?.as_mut_ptr() as *mut i32; // In general .write is required to avoid attempting to destruct // the (uninitialized) previous contents of `ptr`, though for this // simple example `*ptr = 5` would have worked as well. ptr.write(5); let x = Box::from_raw_in(ptr, System); }
pub fn into_raw(b: Box<T, A>) -> *mut T
1.4.0[src][−]
Consumes the Box
, returning a wrapped raw pointer.
The pointer will be properly aligned and non-null.
After calling this function, the caller is responsible for the
memory previously managed by the Box
. In particular, the
caller should properly destroy T
and release the memory, taking
into account the memory layout used by Box
. The easiest way to
do this is to convert the raw pointer back into a Box
with the
Box::from_raw
function, allowing the Box
destructor to perform
the cleanup.
Note: this is an associated function, which means that you have
to call it as Box::into_raw(b)
instead of b.into_raw()
. This
is so that there is no conflict with a method on the inner type.
Examples
Converting the raw pointer back into a Box
with Box::from_raw
for automatic cleanup:
let x = Box::new(String::from("Hello")); let ptr = Box::into_raw(x); let x = unsafe { Box::from_raw(ptr) };
Manual cleanup by explicitly running the destructor and deallocating the memory:
use std::alloc::{dealloc, Layout}; use std::ptr; let x = Box::new(String::from("Hello")); let p = Box::into_raw(x); unsafe { ptr::drop_in_place(p); dealloc(p as *mut u8, Layout::new::<String>()); }
pub fn into_raw_with_allocator(b: Box<T, A>) -> (*mut T, A)
[src][−]
allocator_api
)Consumes the Box
, returning a wrapped raw pointer and the allocator.
The pointer will be properly aligned and non-null.
After calling this function, the caller is responsible for the
memory previously managed by the Box
. In particular, the
caller should properly destroy T
and release the memory, taking
into account the memory layout used by Box
. The easiest way to
do this is to convert the raw pointer back into a Box
with the
Box::from_raw_in
function, allowing the Box
destructor to perform
the cleanup.
Note: this is an associated function, which means that you have
to call it as Box::into_raw_with_allocator(b)
instead of b.into_raw_with_allocator()
. This
is so that there is no conflict with a method on the inner type.
Examples
Converting the raw pointer back into a Box
with Box::from_raw_in
for automatic cleanup:
#![feature(allocator_api)] use std::alloc::System; let x = Box::new_in(String::from("Hello"), System); let (ptr, alloc) = Box::into_raw_with_allocator(x); let x = unsafe { Box::from_raw_in(ptr, alloc) };
Manual cleanup by explicitly running the destructor and deallocating the memory:
#![feature(allocator_api)] use std::alloc::{Allocator, Layout, System}; use std::ptr::{self, NonNull}; let x = Box::new_in(String::from("Hello"), System); let (ptr, alloc) = Box::into_raw_with_allocator(x); unsafe { ptr::drop_in_place(ptr); let non_null = NonNull::new_unchecked(ptr); alloc.deallocate(non_null.cast(), Layout::new::<String>()); }
pub fn allocator(b: &Box<T, A>) -> &Aⓘ
[src][−]
allocator_api
)Returns a reference to the underlying allocator.
Note: this is an associated function, which means that you have
to call it as Box::allocator(&b)
instead of b.allocator()
. This
is so that there is no conflict with a method on the inner type.
pub fn leak<'a>(b: Box<T, A>) -> &'a mut Tⓘ where
A: 'a,
1.26.0[src][−]
A: 'a,
Consumes and leaks the Box
, returning a mutable reference,
&'a mut T
. Note that the type T
must outlive the chosen lifetime
'a
. If the type has only static references, or none at all, then this
may be chosen to be 'static
.
This function is mainly useful for data that lives for the remainder of
the program’s life. Dropping the returned reference will cause a memory
leak. If this is not acceptable, the reference should first be wrapped
with the Box::from_raw
function producing a Box
. This Box
can
then be dropped which will properly destroy T
and release the
allocated memory.
Note: this is an associated function, which means that you have
to call it as Box::leak(b)
instead of b.leak()
. This
is so that there is no conflict with a method on the inner type.
Examples
Simple usage:
let x = Box::new(41); let static_ref: &'static mut usize = Box::leak(x); *static_ref += 1; assert_eq!(*static_ref, 42);
Unsized data:
let x = vec![1, 2, 3].into_boxed_slice(); let static_ref = Box::leak(x); static_ref[0] = 4; assert_eq!(*static_ref, [4, 2, 3]);
pub fn into_pin(boxed: Box<T, A>) -> Pin<Box<T, A>> where
A: 'static,
[src][−]
A: 'static,
box_into_pin
)Converts a Box<T>
into a Pin<Box<T>>
This conversion does not allocate on the heap and happens in place.
This is also available via From
.
impl<A> Box<dyn Any + 'static, A> where
A: Allocator,
[src][−]
A: Allocator,
pub fn downcast<T>(self) -> Result<Box<T, A>, Box<dyn Any + 'static, A>> where
T: Any,
[src][−]
T: Any,
Attempt to downcast the box to a concrete type.
Examples
use std::any::Any; fn print_if_string(value: Box<dyn Any>) { if let Ok(string) = value.downcast::<String>() { println!("String ({}): {}", string.len(), string); } } let my_string = "Hello World".to_string(); print_if_string(Box::new(my_string)); print_if_string(Box::new(0i8));
impl<A> Box<dyn Any + 'static + Send, A> where
A: Allocator,
[src][−]
A: Allocator,
pub fn downcast<T>(self) -> Result<Box<T, A>, Box<dyn Any + 'static + Send, A>> where
T: Any,
[src][−]
T: Any,
Attempt to downcast the box to a concrete type.
Examples
use std::any::Any; fn print_if_string(value: Box<dyn Any + Send>) { if let Ok(string) = value.downcast::<String>() { println!("String ({}): {}", string.len(), string); } } let my_string = "Hello World".to_string(); print_if_string(Box::new(my_string)); print_if_string(Box::new(0i8));
impl<A> Box<dyn Any + 'static + Sync + Send, A> where
A: Allocator,
[src][−]
A: Allocator,
pub fn downcast<T>(
self
) -> Result<Box<T, A>, Box<dyn Any + 'static + Sync + Send, A>> where
T: Any,
1.51.0[src][−]
self
) -> Result<Box<T, A>, Box<dyn Any + 'static + Sync + Send, A>> where
T: Any,
Attempt to downcast the box to a concrete type.
Examples
use std::any::Any; fn print_if_string(value: Box<dyn Any + Send + Sync>) { if let Ok(string) = value.downcast::<String>() { println!("String ({}): {}", string.len(), string); } } let my_string = "Hello World".to_string(); print_if_string(Box::new(my_string)); print_if_string(Box::new(0i8));
Trait Implementations
impl<T, A> AsMut<T> for Box<T, A> where
T: ?Sized,
A: Allocator,
1.5.0[src][+]
T: ?Sized,
A: Allocator,
impl<T, A> AsRef<T> for Box<T, A> where
T: ?Sized,
A: Allocator,
1.5.0[src][+]
T: ?Sized,
A: Allocator,
impl<T, A> Borrow<T> for Box<T, A> where
T: ?Sized,
A: Allocator,
1.1.0[src][+]
T: ?Sized,
A: Allocator,
impl<T, A> BorrowMut<T> for Box<T, A> where
T: ?Sized,
A: Allocator,
1.1.0[src][+]
T: ?Sized,
A: Allocator,
impl<B> BufRead for Box<B, Global> where
B: BufRead + ?Sized,
[src][+]
B: BufRead + ?Sized,
impl Clone for Box<OsStr, Global>
1.29.0[src][+]
impl Clone for Box<CStr, Global>
1.29.0[src][+]
impl Clone for Box<Path, Global>
1.29.0[src][+]
impl<T, A> Clone for Box<T, A> where
T: Clone,
A: Allocator + Clone,
[src][+]
T: Clone,
A: Allocator + Clone,
impl<T, A> Clone for Box<[T], A> where
T: Clone,
A: Allocator + Clone,
1.3.0[src][+]
T: Clone,
A: Allocator + Clone,
impl Clone for Box<str, Global>
1.3.0[src][+]
impl<T, U, A> CoerceUnsized<Box<U, A>> for Box<T, A> where
T: Unsize<U> + ?Sized,
U: ?Sized,
A: Allocator,
[src]
T: Unsize<U> + ?Sized,
U: ?Sized,
A: Allocator,
impl<T, A> Debug for Box<T, A> where
T: Debug + ?Sized,
A: Allocator,
[src][+]
T: Debug + ?Sized,
A: Allocator,
impl Default for Box<CStr, Global>
1.17.0[src][+]
impl Default for Box<OsStr, Global>
1.17.0[src][+]
impl Default for Box<str, Global>
1.17.0[src][+]
impl<T> Default for Box<T, Global> where
T: Default,
[src][+]
T: Default,
impl<T> Default for Box<[T], Global>
[src][+]
impl<T, A> Deref for Box<T, A> where
T: ?Sized,
A: Allocator,
[src][+]
T: ?Sized,
A: Allocator,
impl<T, A> DerefMut for Box<T, A> where
T: ?Sized,
A: Allocator,
[src][+]
T: ?Sized,
A: Allocator,
impl<T, U> DispatchFromDyn<Box<U, Global>> for Box<T, Global> where
T: Unsize<U> + ?Sized,
U: ?Sized,
[src]
T: Unsize<U> + ?Sized,
U: ?Sized,
impl<T, A> Display for Box<T, A> where
T: Display + ?Sized,
A: Allocator,
[src][+]
T: Display + ?Sized,
A: Allocator,
impl<I, A> DoubleEndedIterator for Box<I, A> where
I: DoubleEndedIterator + ?Sized,
A: Allocator,
[src][+]
I: DoubleEndedIterator + ?Sized,
A: Allocator,
impl<T, A> Drop for Box<T, A> where
T: ?Sized,
A: Allocator,
[src][+]
T: ?Sized,
A: Allocator,
impl<T, A> Eq for Box<T, A> where
T: Eq + ?Sized,
A: Allocator,
[src]
T: Eq + ?Sized,
A: Allocator,
impl<T> Error for Box<T, Global> where
T: Error,
1.8.0[src][+]
T: Error,
impl<I, A> ExactSizeIterator for Box<I, A> where
I: ExactSizeIterator + ?Sized,
A: Allocator,
[src][+]
I: ExactSizeIterator + ?Sized,
A: Allocator,
impl Extend<Box<str, Global>> for String
1.45.0[src][+]
impl<Args, F, A> Fn<Args> for Box<F, A> where
F: Fn<Args> + ?Sized,
A: Allocator,
1.35.0[src][+]
F: Fn<Args> + ?Sized,
A: Allocator,
impl<Args, F, A> FnMut<Args> for Box<F, A> where
F: FnMut<Args> + ?Sized,
A: Allocator,
1.35.0[src][+]
F: FnMut<Args> + ?Sized,
A: Allocator,
impl<Args, F, A> FnOnce<Args> for Box<F, A> where
F: FnOnce<Args> + ?Sized,
A: Allocator,
1.35.0[src][+]
F: FnOnce<Args> + ?Sized,
A: Allocator,
impl<'_, T> From<&'_ [T]> for Box<[T], Global> where
T: Copy,
1.17.0[src][+]
T: Copy,
impl<'_> From<&'_ CStr> for Box<CStr, Global>
1.17.0[src][+]
impl<'_> From<&'_ OsStr> for Box<OsStr, Global>
1.17.0[src][+]
impl<'_> From<&'_ Path> for Box<Path, Global>
1.17.0[src][+]
impl<'_> From<&'_ str> for Box<dyn Error + 'static, Global>
1.6.0[src][+]
impl<'a, '_> From<&'_ str> for Box<dyn Error + 'a + Sync + Send, Global>
[src][+]
impl<'_> From<&'_ str> for Box<str, Global>
1.17.0[src][+]
impl<T, const N: usize> From<[T; N]> for Box<[T], Global>
1.45.0[src][+]
impl<T, A> From<Box<[T], A>> for Vec<T, A> where
A: Allocator,
1.18.0[src][+]
A: Allocator,
impl From<Box<CStr, Global>> for CString
1.18.0[src][+]
impl From<Box<OsStr, Global>> for OsString
1.18.0[src][+]
impl From<Box<Path, Global>> for PathBuf
1.18.0[src][+]
impl<T, A> From<Box<T, A>> for Pin<Box<T, A>> where
T: ?Sized,
A: Allocator + 'static,
1.33.0[src][+]
T: ?Sized,
A: Allocator + 'static,
impl<T> From<Box<T, Global>> for Rc<T> where
T: ?Sized,
1.21.0[src][+]
T: ?Sized,
impl<T> From<Box<T, Global>> for Arc<T> where
T: ?Sized,
1.21.0[src][+]
T: ?Sized,
impl<A> From<Box<str, A>> for Box<[u8], A> where
A: Allocator,
1.19.0[src][+]
A: Allocator,
impl From<Box<str, Global>> for String
1.18.0[src][+]
impl From<CString> for Box<CStr, Global>
1.20.0[src][+]
impl<'_, T> From<Cow<'_, [T]>> for Box<[T], Global> where
T: Copy,
1.45.0[src][+]
T: Copy,
impl<'_> From<Cow<'_, CStr>> for Box<CStr, Global>
1.45.0[src][+]
impl<'_> From<Cow<'_, OsStr>> for Box<OsStr, Global>
1.45.0[src][+]
impl<'_> From<Cow<'_, Path>> for Box<Path, Global>
1.45.0[src][+]
impl<'_> From<Cow<'_, str>> for Box<str, Global>
1.45.0[src][+]
impl<'a> From<Cow<'a, str>> for Box<dyn Error + 'static, Global>
1.22.0[src][+]
impl<'a, 'b> From<Cow<'b, str>> for Box<dyn Error + 'a + Sync + Send, Global>
1.22.0[src][+]
impl<'a, E> From<E> for Box<dyn Error + 'a + Sync + Send, Global> where
E: 'a + Error + Send + Sync,
[src][+]
E: 'a + Error + Send + Sync,
impl<'a, E> From<E> for Box<dyn Error + 'a, Global> where
E: 'a + Error,
[src][+]
E: 'a + Error,
impl From<OsString> for Box<OsStr, Global>
1.20.0[src][+]
impl From<PathBuf> for Box<Path, Global>
1.20.0[src][+]
impl From<String> for Box<dyn Error + 'static + Sync + Send, Global>
[src][+]
impl From<String> for Box<dyn Error + 'static, Global>
1.6.0[src][+]
impl From<String> for Box<str, Global>
1.20.0[src][+]
impl<T> From<T> for Box<T, Global>
1.6.0[src][+]
impl<T, A> From<Vec<T, A>> for Box<[T], A> where
A: Allocator,
1.20.0[src][+]
A: Allocator,
impl FromIterator<Box<str, Global>> for String
1.45.0[src][+]
impl<I> FromIterator<I> for Box<[I], Global>
1.32.0[src][+]
impl<I, A> FusedIterator for Box<I, A> where
I: FusedIterator + ?Sized,
A: Allocator,
1.26.0[src]
I: FusedIterator + ?Sized,
A: Allocator,
impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static,
1.36.0[src][+]
F: Future + Unpin + ?Sized,
A: Allocator + 'static,
impl<G, R, A> Generator<R> for Box<G, A> where
G: Generator<R> + Unpin + ?Sized,
A: Allocator + 'static,
[src][+]
G: Generator<R> + Unpin + ?Sized,
A: Allocator + 'static,
impl<T, A> Hash for Box<T, A> where
T: Hash + ?Sized,
A: Allocator,
[src][+]
T: Hash + ?Sized,
A: Allocator,
impl<T, A> Hasher for Box<T, A> where
T: Hasher + ?Sized,
A: Allocator,
1.22.0[src][+]
T: Hasher + ?Sized,
A: Allocator,
impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator,
[src][+]
I: Iterator + ?Sized,
A: Allocator,
impl<T, A> Ord for Box<T, A> where
T: Ord + ?Sized,
A: Allocator,
[src][+]
T: Ord + ?Sized,
A: Allocator,
impl<T, A> PartialEq<Box<T, A>> for Box<T, A> where
T: PartialEq<T> + ?Sized,
A: Allocator,
[src][+]
T: PartialEq<T> + ?Sized,
A: Allocator,
impl<T, A> PartialOrd<Box<T, A>> for Box<T, A> where
T: PartialOrd<T> + ?Sized,
A: Allocator,
[src][+]
T: PartialOrd<T> + ?Sized,
A: Allocator,
impl<T, A> Pointer for Box<T, A> where
T: ?Sized,
A: Allocator,
[src][+]
T: ?Sized,
A: Allocator,
impl<R> Read for Box<R, Global> where
R: Read + ?Sized,
[src][+]
R: Read + ?Sized,
impl<S> Seek for Box<S, Global> where
S: Seek + ?Sized,
[src][+]
S: Seek + ?Sized,
impl<S> Stream for Box<S, Global> where
S: Stream + Unpin + ?Sized,
[src][+]
S: Stream + Unpin + ?Sized,
impl<T, const N: usize> TryFrom<Box<[T], Global>> for Box<[T; N], Global>
1.43.0[src][+]
impl<T, A> Unpin for Box<T, A> where
T: ?Sized,
A: Allocator + 'static,
1.33.0[src]
T: ?Sized,
A: Allocator + 'static,
impl<W> Write for Box<W, Global> where
W: Write + ?Sized,
[src][+]
W: Write + ?Sized,
Auto Trait Implementations
impl<T: ?Sized, A> RefUnwindSafe for Box<T, A> where
A: RefUnwindSafe,
T: RefUnwindSafe,
A: RefUnwindSafe,
T: RefUnwindSafe,
impl<T: ?Sized, A> Send for Box<T, A> where
A: Send,
T: Send,
A: Send,
T: Send,
impl<T: ?Sized, A> Sync for Box<T, A> where
A: Sync,
T: Sync,
A: Sync,
T: Sync,
impl<T: ?Sized, A> UnwindSafe for Box<T, A> where
A: UnwindSafe,
T: UnwindSafe,
A: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src][+]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<T> From<!> for T
[src][+]
impl<T> From<T> for T
[src][+]
impl<T, U> Into<U> for T where
U: From<T>,
[src][+]
U: From<T>,
impl<F> IntoFuture for F where
F: Future,
[src][+]
F: Future,
impl<I> IntoIterator for I where
I: Iterator,
[src][+]
I: Iterator,
impl<'a, F> Pattern<'a> for F where
F: FnMut(char) -> bool,
[src][+]
F: FnMut(char) -> bool,
impl<T> ToOwned for T where
T: Clone,
[src][+]
T: Clone,
impl<T> ToString for T where
T: Display + ?Sized,
[src][+]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src][+]
U: Into<T>,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src][+]
U: TryFrom<T>,