Struct std::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>
impl<T> Box<T> where
T: ?Sized,
[src]
[−]
impl<T> Box<T> where
T: ?Sized,
ⓘImportant traits for Box<I>pub unsafe fn from_raw(raw: *mut T) -> Box<T>
1.4.0[src]
[−]
pub unsafe fn from_raw(raw: *mut T) -> Box<T>
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) };Run
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);Run
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); }Run
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
ⓘImportant traits for &'a mut Ipub 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); }Run
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]); }Run
impl Box<Any + 'static>
[src]
[−]
impl Box<Any + 'static>
pub fn downcast<T>(self) -> Result<Box<T>, Box<Any + 'static>> where
T: Any,
[src]
[−]
pub fn downcast<T>(self) -> Result<Box<T>, Box<Any + 'static>> where
T: 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)); }Run
impl Box<Any + 'static + Send>
[src]
[−]
impl Box<Any + 'static + Send>
pub fn downcast<T>(self) -> Result<Box<T>, Box<Any + 'static + Send>> where
T: Any,
[src]
[−]
pub fn downcast<T>(self) -> Result<Box<T>, Box<Any + 'static + Send>> where
T: Any,
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)); }Run
Trait Implementations
impl<I> Iterator for Box<I> where
I: Iterator + ?Sized,
[src]
[+]
impl<I> Iterator for Box<I> where
I: Iterator + ?Sized,
impl<T> Pointer for Box<T> where
T: ?Sized,
[src]
[+]
impl<T> Pointer for Box<T> where
T: ?Sized,
impl<T> Boxed for Box<T>
[src]
[+]
impl<T> Boxed for Box<T>
impl<I> ExactSizeIterator for Box<I> where
I: ExactSizeIterator + ?Sized,
[src]
[+]
impl<I> ExactSizeIterator for Box<I> where
I: ExactSizeIterator + ?Sized,
impl<T> Borrow<T> for Box<T> where
T: ?Sized,
1.1.0[src]
[+]
impl<T> Borrow<T> for Box<T> where
T: ?Sized,
impl<T> Hasher for Box<T> where
T: Hasher + ?Sized,
1.22.0[src]
[+]
impl<T> Hasher for Box<T> where
T: Hasher + ?Sized,
impl<T> Display for Box<T> where
T: Display + ?Sized,
[src]
[+]
impl<T> Display for Box<T> where
T: Display + ?Sized,
impl<T> Ord for Box<T> where
T: Ord + ?Sized,
[src]
[+]
impl<T> Ord for Box<T> where
T: Ord + ?Sized,
impl<I> FusedIterator for Box<I> where
I: FusedIterator + ?Sized,
1.26.0[src]
impl<I> FusedIterator for Box<I> where
I: FusedIterator + ?Sized,
impl<T> DerefMut for Box<T> where
T: ?Sized,
[src]
[+]
impl<T> DerefMut for Box<T> where
T: ?Sized,
impl<T> From<T> for Box<T>
1.6.0[src]
[+]
impl<T> From<T> for Box<T>
impl<T> From<Box<[T]>> for Vec<T>
1.18.0[src]
[+]
impl<T> From<Box<[T]>> for Vec<T>
impl From<Box<str>> for String
1.18.0[src]
[+]
impl From<Box<str>> for String
impl<T> From<Vec<T>> for Box<[T]>
1.20.0[src]
[+]
impl<T> From<Vec<T>> for Box<[T]>
impl From<String> for Box<str>
1.20.0[src]
[+]
impl From<String> for Box<str>
impl<'a> From<&'a str> for Box<str>
1.17.0[src]
[+]
impl<'a> From<&'a str> for Box<str>
impl<T> From<Box<T>> for Rc<T> where
T: ?Sized,
1.21.0[src]
[+]
impl<T> From<Box<T>> for Rc<T> where
T: ?Sized,
impl<T> From<PinBox<T>> for Box<T> where
T: Unpin + ?Sized,
[src]
[+]
impl<T> From<PinBox<T>> for Box<T> where
T: Unpin + ?Sized,
impl<T> From<Box<T>> for PinBox<T> where
T: ?Sized,
[src]
[+]
impl<T> From<Box<T>> for PinBox<T> where
T: ?Sized,
impl From<Box<str>> for Box<[u8]>
1.19.0[src]
[+]
impl From<Box<str>> for Box<[u8]>
impl<'a, T> From<&'a [T]> for Box<[T]> where
T: Copy,
1.17.0[src]
[+]
impl<'a, T> From<&'a [T]> for Box<[T]> where
T: Copy,
impl<T> From<Box<T>> for Arc<T> where
T: ?Sized,
1.21.0[src]
[+]
impl<T> From<Box<T>> for Arc<T> where
T: ?Sized,
impl<T> AsRef<T> for Box<T> where
T: ?Sized,
1.5.0[src]
[+]
impl<T> AsRef<T> for Box<T> where
T: ?Sized,
impl<'a, A, R> FnOnce<A> for Box<FnBox<A, Output = R> + 'a + Send>
[src]
[+]
impl<'a, A, R> FnOnce<A> for Box<FnBox<A, Output = R> + 'a + Send>
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<T, U> CoerceUnsized<Box<U>> for Box<T> where
T: Unsize<U> + ?Sized,
U: ?Sized,
[src]
impl<T, U> CoerceUnsized<Box<U>> for Box<T> where
T: Unsize<U> + ?Sized,
U: ?Sized,
impl<T> Drop for Box<T> where
T: ?Sized,
[src]
[+]
impl<T> Drop for Box<T> where
T: ?Sized,
impl<T> Eq for Box<T> where
T: Eq + ?Sized,
[src]
impl<T> Eq for Box<T> where
T: Eq + ?Sized,
impl<T> Hash for Box<T> where
T: Hash + ?Sized,
[src]
[+]
impl<T> Hash for Box<T> where
T: Hash + ?Sized,
impl<T> Clone for Box<[T]> where
T: Clone,
1.3.0[src]
[+]
impl<T> Clone for Box<[T]> where
T: Clone,
impl Clone for Box<str>
1.3.0[src]
[+]
impl Clone for Box<str>
impl<T> Clone for Box<T> where
T: Clone,
[src]
[+]
impl<T> Clone for Box<T> where
T: Clone,
impl<T> AsMut<T> for Box<T> where
T: ?Sized,
1.5.0[src]
[+]
impl<T> AsMut<T> for Box<T> where
T: ?Sized,
impl<T> Default for Box<T> where
T: Default,
[src]
[+]
impl<T> Default for Box<T> where
T: Default,
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> Deref for Box<T> where
T: ?Sized,
[src]
[+]
impl<T> Deref for Box<T> where
T: ?Sized,
impl<T> PartialEq<Box<T>> for Box<T> where
T: PartialEq<T> + ?Sized,
[src]
[+]
impl<T> PartialEq<Box<T>> for Box<T> where
T: PartialEq<T> + ?Sized,
impl<I> DoubleEndedIterator for Box<I> where
I: DoubleEndedIterator + ?Sized,
[src]
[+]
impl<I> DoubleEndedIterator for Box<I> where
I: DoubleEndedIterator + ?Sized,
impl<T> Generator for Box<T> where
T: Generator + ?Sized,
[src]
[+]
impl<T> Generator for Box<T> where
T: Generator + ?Sized,
impl<T> BorrowMut<T> for Box<T> where
T: ?Sized,
1.1.0[src]
[+]
impl<T> BorrowMut<T> for Box<T> where
T: ?Sized,
impl<T> PartialOrd<Box<T>> for Box<T> where
T: PartialOrd<T> + ?Sized,
[src]
[+]
impl<T> PartialOrd<Box<T>> for Box<T> where
T: PartialOrd<T> + ?Sized,
impl<T> Debug for Box<T> where
T: Debug + ?Sized,
[src]
[+]
impl<T> Debug for Box<T> where
T: Debug + ?Sized,
impl<'a, E: Error + 'a> From<E> for Box<Error + 'a>
[src]
[+]
impl<'a, E: Error + 'a> From<E> for Box<Error + 'a>
impl<'a, E: Error + Send + Sync + 'a> From<E> for Box<Error + Send + Sync + 'a>
[src]
[+]
impl<'a, E: Error + Send + Sync + 'a> From<E> for Box<Error + Send + Sync + 'a>
impl From<String> for Box<Error + Send + Sync>
[src]
[+]
impl From<String> for Box<Error + Send + Sync>
impl From<String> for Box<Error>
1.6.0[src]
[+]
impl From<String> for Box<Error>
impl<'a, 'b> From<&'b str> for Box<Error + Send + Sync + 'a>
[src]
[+]
impl<'a, 'b> From<&'b str> for Box<Error + Send + Sync + 'a>
impl<'a> From<&'a str> for Box<Error>
1.6.0[src]
[+]
impl<'a> From<&'a str> for Box<Error>
impl<'a, 'b> From<Cow<'b, str>> for Box<Error + Send + Sync + 'a>
1.22.0[src]
[+]
impl<'a, 'b> From<Cow<'b, str>> for Box<Error + Send + Sync + 'a>
impl<'a> From<Cow<'a, str>> for Box<Error>
1.22.0[src]
[+]
impl<'a> From<Cow<'a, str>> for Box<Error>
impl<T: Error> Error for Box<T>
1.8.0[src]
[+]
impl<T: Error> Error for Box<T>
impl<'a> From<&'a CStr> for Box<CStr>
1.17.0[src]
[+]
impl<'a> From<&'a CStr> for Box<CStr>
impl From<Box<CStr>> for CString
1.18.0[src]
[+]
impl From<Box<CStr>> for CString
impl From<CString> for Box<CStr>
1.20.0[src]
[+]
impl From<CString> for Box<CStr>
impl Default for Box<CStr>
1.17.0[src]
[+]
impl Default for Box<CStr>
impl<'a> From<&'a OsStr> for Box<OsStr>
1.17.0[src]
[+]
impl<'a> From<&'a OsStr> for Box<OsStr>
impl From<Box<OsStr>> for OsString
1.18.0[src]
[+]
impl From<Box<OsStr>> for OsString
impl From<OsString> for Box<OsStr>
1.20.0[src]
[+]
impl From<OsString> for Box<OsStr>
impl Default for Box<OsStr>
1.17.0[src]
[+]
impl Default for Box<OsStr>
impl<R: Read + ?Sized> Read for Box<R>
[src]
[+]
impl<R: Read + ?Sized> Read for Box<R>
impl<W: Write + ?Sized> Write for Box<W>
[src]
[+]
impl<W: Write + ?Sized> Write for Box<W>
impl<S: Seek + ?Sized> Seek for Box<S>
[src]
[+]
impl<S: Seek + ?Sized> Seek for Box<S>
impl<B: BufRead + ?Sized> BufRead for Box<B>
[src]
[+]
impl<B: BufRead + ?Sized> BufRead for Box<B>
impl<'a> From<&'a Path> for Box<Path>
1.17.0[src]
[+]
impl<'a> From<&'a Path> for Box<Path>
impl From<Box<Path>> for PathBuf
1.18.0[src]
[+]
impl From<Box<Path>> for PathBuf
impl From<PathBuf> for Box<Path>
1.20.0[src]
[+]
impl From<PathBuf> for Box<Path>