Struct alloc::boxed::Box 1.0.0
[−]
[src]
A pointer type for heap allocation.
See the module-level documentation for more.
Methods
impl<T> Box<T>
[src]
[−]
impl<T> Box<T>
ⓘImportant traits for Box<I>pub fn new(x: T) -> Box<T>
[src]
[−]
pub fn new(x: T) -> Box<T>
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);
impl<T: ?Sized> Box<T>
[src]
[−]
impl<T: ?Sized> Box<T>
pub unsafe fn from_raw(raw: *mut T) -> Self
1.4.0[src]
[−]
pub unsafe fn from_raw(raw: *mut T) -> Self
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]
[−]
pub fn into_raw(b: Box<T>) -> *mut T
Consumes the Box
, returning the wrapped raw pointer.
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]
[−]
pub fn into_raw_non_null(b: Box<T>) -> NonNull<T>
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 into_unique(b: Box<T>) -> Unique<T>
[src]
pub fn into_unique(b: Box<T>) -> Unique<T>
🔬 This is a nightly-only experimental API. (ptr_internals
)
use into_raw_non_null instead
pub fn leak<'a>(b: Box<T>) -> &'a mut T where
T: 'a,
1.26.0[src]
[−]
pub fn leak<'a>(b: Box<T>) -> &'a mut T where
T: 'a,
Consumes and leaks the Box
, returning a mutable reference,
&'a mut T
. Here, the lifetime 'a
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]); }
impl Box<Any>
[src]
[−]
impl Box<Any>
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any>>
[src]
[−]
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any>>
Attempt to downcast the box to a concrete type.
Examples
use std::any::Any; fn print_if_string(value: Box<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<Any + Send>
[src]
[−]
impl Box<Any + Send>
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any + Send>>
[src]
[−]
pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any + Send>>
Attempt to downcast the box to a concrete type.
Examples
use std::any::Any; fn print_if_string(value: Box<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> Boxed for Box<T>
[src]
[+]
impl<T> Boxed for Box<T>
impl<T: ?Sized> Drop for Box<T>
[src]
[+]
impl<T: ?Sized> Drop for Box<T>
impl<T: Default> Default for Box<T>
[src]
[+]
impl<T: Default> Default for Box<T>
impl<T> Default for Box<[T]>
[src]
[+]
impl<T> Default for Box<[T]>
impl Default for Box<str>
1.17.0[src]
[+]
impl Default for Box<str>
impl<T: Clone> Clone for Box<T>
[src]
[+]
impl<T: Clone> Clone for Box<T>
impl Clone for Box<str>
1.3.0[src]
[+]
impl Clone for Box<str>
impl<T: ?Sized + PartialEq> PartialEq for Box<T>
[src]
[+]
impl<T: ?Sized + PartialEq> PartialEq for Box<T>
impl<T: ?Sized + PartialOrd> PartialOrd for Box<T>
[src]
[+]
impl<T: ?Sized + PartialOrd> PartialOrd for Box<T>
impl<T: ?Sized + Ord> Ord for Box<T>
[src]
[+]
impl<T: ?Sized + Ord> Ord for Box<T>
impl<T: ?Sized + Eq> Eq for Box<T>
[src]
impl<T: ?Sized + Eq> Eq for Box<T>
impl<T: ?Sized + Hash> Hash for Box<T>
[src]
[+]
impl<T: ?Sized + Hash> Hash for Box<T>
impl<T: ?Sized + Hasher> Hasher for Box<T>
1.22.0[src]
[+]
impl<T: ?Sized + Hasher> Hasher for Box<T>
impl<T> From<T> for Box<T>
1.6.0[src]
[+]
impl<T> From<T> for Box<T>
impl<'a, T: Copy> From<&'a [T]> for Box<[T]>
1.17.0[src]
[+]
impl<'a, T: Copy> From<&'a [T]> for Box<[T]>
impl<'a> From<&'a str> for Box<str>
1.17.0[src]
[+]
impl<'a> From<&'a str> for Box<str>
impl From<Box<str>> for Box<[u8]>
1.19.0[src]
[+]
impl From<Box<str>> for Box<[u8]>
impl<T: Display + ?Sized> Display for Box<T>
[src]
[+]
impl<T: Display + ?Sized> Display for Box<T>
impl<T: Debug + ?Sized> Debug for Box<T>
[src]
[+]
impl<T: Debug + ?Sized> Debug for Box<T>
impl<T: ?Sized> Pointer for Box<T>
[src]
[+]
impl<T: ?Sized> Pointer for Box<T>
impl<T: ?Sized> Deref for Box<T>
[src]
[+]
impl<T: ?Sized> Deref for Box<T>
impl<T: ?Sized> DerefMut for Box<T>
[src]
[+]
impl<T: ?Sized> DerefMut for Box<T>
impl<I: Iterator + ?Sized> Iterator for Box<I>
[src]
[+]
impl<I: Iterator + ?Sized> Iterator for Box<I>
impl<I: DoubleEndedIterator + ?Sized> DoubleEndedIterator for Box<I>
[src]
[+]
impl<I: DoubleEndedIterator + ?Sized> DoubleEndedIterator for Box<I>
impl<I: ExactSizeIterator + ?Sized> ExactSizeIterator for Box<I>
[src]
[+]
impl<I: ExactSizeIterator + ?Sized> ExactSizeIterator for Box<I>
impl<I: FusedIterator + ?Sized> FusedIterator for Box<I>
1.26.0[src]
impl<I: FusedIterator + ?Sized> FusedIterator for Box<I>
impl<'a, A, R> FnOnce<A> for Box<FnBox<A, Output = R> + 'a>
[src]
[+]
impl<'a, A, R> FnOnce<A> for Box<FnBox<A, Output = R> + 'a>
impl<'a, A, R> FnOnce<A> for Box<FnBox<A, Output = R> + Send + 'a>
[src]
[+]
impl<'a, A, R> FnOnce<A> for Box<FnBox<A, Output = R> + Send + 'a>
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T>
[src]
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T>
impl<T: Clone> Clone for Box<[T]>
1.3.0[src]
[+]
impl<T: Clone> Clone for Box<[T]>
impl<T: ?Sized> Borrow<T> for Box<T>
1.1.0[src]
[+]
impl<T: ?Sized> Borrow<T> for Box<T>
impl<T: ?Sized> BorrowMut<T> for Box<T>
1.1.0[src]
[+]
impl<T: ?Sized> BorrowMut<T> for Box<T>
impl<T: ?Sized> AsRef<T> for Box<T>
1.5.0[src]
[+]
impl<T: ?Sized> AsRef<T> for Box<T>
impl<T: ?Sized> AsMut<T> for Box<T>
1.5.0[src]
[+]
impl<T: ?Sized> AsMut<T> for Box<T>
impl<T: ?Sized> Generator for Box<T> where
T: Generator,
[src]
[+]
impl<T: ?Sized> Generator for Box<T> where
T: Generator,
impl<T: ?Sized> From<Box<T>> for PinBox<T>
[src]
[+]
impl<T: ?Sized> From<Box<T>> for PinBox<T>
impl<T: Unpin + ?Sized> From<PinBox<T>> for Box<T>
[src]
[+]
impl<T: Unpin + ?Sized> From<PinBox<T>> for Box<T>
impl<T: ?Sized> From<Box<T>> for Arc<T>
1.21.0[src]
[+]
impl<T: ?Sized> From<Box<T>> for Arc<T>
impl<T: ?Sized> From<Box<T>> for Rc<T>
1.21.0[src]
[+]
impl<T: ?Sized> From<Box<T>> for Rc<T>
impl From<Box<str>> for String
1.18.0[src]
[+]
impl From<Box<str>> for String
impl From<String> for Box<str>
1.20.0[src]
[+]
impl From<String> for Box<str>
impl<T> From<Box<[T]>> for Vec<T>
1.18.0[src]
[+]
impl<T> From<Box<[T]>> for Vec<T>
impl<T> From<Vec<T>> for Box<[T]>
1.20.0[src]
[+]
impl<T> From<Vec<T>> for Box<[T]>