Struct core::cell::UnsafeCell
[−]
[src]
pub struct UnsafeCell<T: ?Sized> {
pub value: T,
}The core primitive for interior mutability in Rust.
UnsafeCell<T>`UnsafeCellis a type that wraps some` is a type that wraps some T`Tand indicates unsafe interior operations on the wrapped type. Types with an` and indicates unsafe interior operations on the
wrapped type. Types with an UnsafeCell<T>`UnsafeCellfield are considered to have an 'unsafe interior'. The` field are considered to have an 'unsafe interior'.
The UnsafeCell<T>`UnsafeCelltype is the only legal way to obtain aliasable data that is considered mutable. In general, transmuting an` type is the only legal way to obtain aliasable data that is considered
mutable. In general, transmuting an &T`&Ttype into an` type into an &mut T`&mut T` is considered undefined behavior.
Types like Cell<T>`Celland` and RefCell<T>`RefCell
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>`UnsafeCell's fields are public to allow static initializers. It is not recommended to access its fields directly,`'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 | Unstable 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`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 there is no guarantee that this or other threads are currently 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: ?Sized> UnsafeCell<T>
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();