Struct std::cell::UnsafeCell
[−]
[src]
pub struct UnsafeCell<T> where T: ?Sized {
pub value: T,
}
The core primitive for interior mutability in Rust.
UnsafeCell<T>
is a type that wraps some T
`Tand indicates unsafe interior operations on the wrapped type. Types with an
UnsafeCellfield are considered to have an 'unsafe interior'. The
UnsafeCelltype is the only legal way to obtain aliasable data that is considered mutable. In general, transmuting an
&Ttype into an
&mut T` is considered undefined behavior.
Types like Cell<T>
`Celland
` and RefCell<T>
use this type to wrap their internal data.
Examples
fn main() { use std::cell::UnsafeCell; use std::marker::Sync; struct NotThreadSafe<T> { value: UnsafeCell<T>, } unsafe impl<T> Sync for NotThreadSafe<T> {} }use std::cell::UnsafeCell; use std::marker::Sync; struct NotThreadSafe<T> { value: UnsafeCell<T>, } unsafe impl<T> Sync for NotThreadSafe<T> {}
NOTE: UnsafeCell<T>
's fields are public to allow static initializers. It is not
recommended to access its fields directly, get
`get` should be used instead.
Fields
value | Deprecated since 1.2.0 : use Wrapped value This field should not be accessed directly, it is made public for static initializers. |
Methods
impl<T> UnsafeCell<T>
fn new(value: T) -> UnsafeCell<T>
Constructs a new instance of UnsafeCell
which will wrap the specified
value.
All access to the inner value through methods is unsafe
`unsafe`, and it is highly discouraged to
access the fields directly.
Examples
fn main() { use std::cell::UnsafeCell; let uc = UnsafeCell::new(5); }use std::cell::UnsafeCell; let uc = UnsafeCell::new(5);
unsafe fn into_inner(self) -> T
Unwraps the value.
Unsafety
This function is unsafe because this thread or another thread may currently be inspecting the inner value.
Examples
fn main() { use std::cell::UnsafeCell; let uc = UnsafeCell::new(5); let five = unsafe { uc.into_inner() }; }use std::cell::UnsafeCell; let uc = UnsafeCell::new(5); let five = unsafe { uc.into_inner() };
impl<T> UnsafeCell<T> where T: ?Sized
fn get(&self) -> *mut T
Gets a mutable pointer to the wrapped value.
Examples
fn main() { use std::cell::UnsafeCell; let uc = UnsafeCell::new(5); let five = uc.get(); }use std::cell::UnsafeCell; let uc = UnsafeCell::new(5); let five = uc.get();