Struct std::cell::UnsafeCell [] [src]

pub struct UnsafeCell<T> where T: ?Sized {
    value: T,
}

The core primitive for interior mutability in Rust.

UnsafeCell<T> is a type that wraps some T and indicates unsafe interior operations on the wrapped type. Types with an UnsafeCell<T> field are considered to have an 'unsafe interior'. The UnsafeCell<T> type is the only legal way to obtain aliasable data that is considered mutable. In general, transmuting an &T type into an &mut T is considered undefined behavior.

Types like Cell<T> and RefCell<T> use this type to wrap their internal data.

Examples

use std::cell::UnsafeCell;
use std::marker::Sync;

struct NotThreadSafe<T> {
    value: UnsafeCell<T>,
}

unsafe impl<T> Sync for NotThreadSafe<T> {}

Fields

value

Methods

impl<T> UnsafeCell<T>

const 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.

Examples

use std::cell::UnsafeCell;

let uc = UnsafeCell::new(5);

unsafe fn into_inner(self) -> T

Unwraps the value.

Safety

This function is unsafe because this thread or another thread may currently be inspecting the inner value.

Examples

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

use std::cell::UnsafeCell;

let uc = UnsafeCell::new(5);

let five = uc.get();

Trait Implementations

impl<T> !Sync for UnsafeCell<T> where T: ?Sized