# Struct core::cell::UnsafeCell [−] [src]

    pub struct UnsafeCell<T: ?Sized> {
        // some fields omitted
    }

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

fn main() { use std::cell::UnsafeCell; use std::marker::Sync; #[allow(dead_code)] 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> {}

## 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

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.

# Safety

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: ?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();

## Trait Implementations

### `impl<T: ?Sized> !Sync for UnsafeCell<T>`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize`)