1.0.0[−][src]Struct alloc::boxed::Box
A pointer type for heap allocation.
See the module-level documentation for more.
Methods
impl<T> Box<T>
[src][−]
ⓘImportant traits for Box<I>pub fn new(x: T) -> Box<T>
[src][−]
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 pin(x: T) -> Pin<Box<T>>
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.
impl<T: ?Sized> Box<T>
[src][−]
pub unsafe fn from_raw(raw: *mut T) -> Self
1.4.0[src][−]
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. Since the
way Box
allocates and releases memory is unspecified, the
only valid pointer to pass to this function is the one taken
from another Box
via the Box::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
let x = Box::new(5); let ptr = Box::into_raw(x); let x = unsafe { Box::from_raw(ptr) };
pub fn into_raw(b: Box<T>) -> *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. The
proper way to do so is to convert the raw pointer back into a
Box
with the Box::from_raw
function.
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
let x = Box::new(5); let ptr = Box::into_raw(x);
pub fn into_raw_non_null(b: Box<T>) -> NonNull<T>
[src][−]
Consumes the Box
, returning the wrapped pointer as NonNull<T>
.
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. The
proper way to do so is to convert the NonNull<T>
pointer
into a raw pointer and back into a Box
with the Box::from_raw
function.
Note: this is an associated function, which means that you have
to call it as Box::into_raw_non_null(b)
instead of b.into_raw_non_null()
. This
is so that there is no conflict with a method on the inner type.
Examples
#![feature(box_into_raw_non_null)] fn main() { let x = Box::new(5); let ptr = Box::into_raw_non_null(x); }
pub fn leak<'a>(b: Box<T>) -> &'a mut T where
T: 'a,
1.26.0[src][−]
T: '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:
fn main() { let x = Box::new(41); let static_ref: &'static mut usize = Box::leak(x); *static_ref += 1; assert_eq!(*static_ref, 42); }
Unsized data:
fn main() { 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>) -> Pin<Box<T>>
[src][−]
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 Box<dyn Any>
[src][−]
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<dyn Any>>
[src][−]
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); } } fn main() { let my_string = "Hello World".to_string(); print_if_string(Box::new(my_string)); print_if_string(Box::new(0i8)); }
impl Box<dyn Any + Send>
[src][−]
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<dyn Any + Send>>
[src][−]
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); } } fn main() { let my_string = "Hello World".to_string(); print_if_string(Box::new(my_string)); print_if_string(Box::new(0i8)); }
Trait Implementations
impl<T: ?Sized + PartialEq> PartialEq<Box<T>> for Box<T>
[src][+]
impl<T: ?Sized + Eq> Eq for Box<T>
[src]
impl<T: ?Sized + Ord> Ord for Box<T>
[src][+]
impl<T: ?Sized + PartialOrd> PartialOrd<Box<T>> for Box<T>
[src][+]
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T>
[src]
impl<T> From<T> for Box<T>
1.6.0[src][+]
impl<T: ?Sized> From<Box<T>> for Pin<Box<T>>
1.33.0[src][+]
impl<T: Copy, '_> From<&'_ [T]> for Box<[T]>
1.17.0[src][+]
impl<'_> From<&'_ str> for Box<str>
1.17.0[src][+]
impl From<Box<str>> for Box<[u8]>
1.19.0[src][+]
impl<T: ?Sized> From<Box<T>> for Arc<T>
1.21.0[src][+]
impl<T: ?Sized> From<Box<T>> for Rc<T>
1.21.0[src][+]
impl From<Box<str>> for String
1.18.0[src][+]
impl From<String> for Box<str>
1.20.0[src][+]
impl<T> From<Box<[T]>> for Vec<T>
1.18.0[src][+]
impl<T> From<Vec<T>> for Box<[T]>
1.20.0[src][+]
impl<T: Debug + ?Sized> Debug for Box<T>
[src][+]
impl<T: Display + ?Sized> Display for Box<T>
[src][+]
impl<T: ?Sized> Deref for Box<T>
[src][+]
impl<T: ?Sized> DerefMut for Box<T>
[src][+]
impl<T: ?Sized> Receiver for Box<T>
[src]
impl<T: ?Sized> Drop for Box<T>
[src][+]
impl<A, F: Fn<A> + ?Sized> Fn<A> for Box<F>
1.35.0[src][+]
impl<A, F: FnMut<A> + ?Sized> FnMut<A> for Box<F>
1.35.0[src][+]
impl<A, F: FnOnce<A> + ?Sized> FnOnce<A> for Box<F>
1.35.0[src][+]
impl<G: ?Sized + Generator + Unpin> Generator for Box<G>
[src][+]
impl<T: ?Sized> Unpin for Box<T>
1.33.0[src]
impl<T: ?Sized + Hash> Hash for Box<T>
[src][+]
impl<T: ?Sized + Hasher> Hasher for Box<T>
1.22.0[src][+]
impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Box<U>> for Box<T>
[src]
impl<A> FromIterator<A> for Box<[A]>
1.32.0[src][+]
impl<I: Iterator + ?Sized> Iterator for Box<I>
[src][+]
impl<I: ExactSizeIterator + ?Sized> ExactSizeIterator for Box<I>
[src][+]
impl<I: DoubleEndedIterator + ?Sized> DoubleEndedIterator for Box<I>
[src][+]
impl<I: FusedIterator + ?Sized> FusedIterator for Box<I>
1.26.0[src]
impl<T: ?Sized> AsRef<T> for Box<T>
1.5.0[src][+]
impl<T: ?Sized> AsMut<T> for Box<T>
1.5.0[src][+]
impl<T: ?Sized> Pointer for Box<T>
[src][+]
impl<T: Clone> Clone for Box<T>
[src][+]
impl Clone for Box<str>
1.3.0[src][+]
impl<T: Clone> Clone for Box<[T]>
1.3.0[src][+]
impl<T: Default> Default for Box<T>
[src][+]
impl<T> Default for Box<[T]>
[src][+]
impl Default for Box<str>
1.17.0[src][+]
impl<T: ?Sized> Borrow<T> for Box<T>
1.1.0[src][+]
impl<T: ?Sized> BorrowMut<T> for Box<T>
1.1.0[src][+]
impl<F: ?Sized + Future + Unpin> Future for Box<F>
1.36.0[src][+]
Auto Trait Implementations
Blanket Implementations
impl<A, F> FnBox<A> for F where
F: FnOnce<A>,
[src][+]
F: FnOnce<A>,
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> From<T> for T
[src][+]
impl<'a, F> Pattern<'a> for F where
F: FnMut(char) -> bool,
[src][+]
F: FnMut(char) -> bool,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src][+]
U: Into<T>,
impl<I> IntoIterator for I where
I: Iterator,
[src][+]
I: Iterator,
impl<T, U> Into<U> for T where
U: From<T>,
[src][+]
U: From<T>,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src][+]
U: TryFrom<T>,
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> Any for T where
T: 'static + ?Sized,
[src][+]
T: 'static + ?Sized,