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>
`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> 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();