Struct std::ptr::Unique
[−]
[src]
pub struct Unique<T> where T: ?Sized {
pointer: NonZero<*const T>,
_marker: PhantomData<T>,
}
unique
): needs an RFC to flesh out design
A wrapper around a raw *mut T
that indicates that the possessor
of this wrapper owns the referent. This in turn implies that the
Unique<T>
is Send
/Sync
if T
is Send
/Sync
, unlike a raw
*mut T
(which conveys no particular ownership semantics). It
also implies that the referent of the pointer should not be
modified without a unique path to the Unique
reference. Useful
for building abstractions like Vec<T>
or Box<T>
, which
internally use raw pointers to manage the memory that they own.
Fields
pointer | Unstable ( unique ): needs an RFC to flesh out design |
_marker | Unstable ( unique ): needs an RFC to flesh out design |
Methods
impl<T> Unique<T> where T: ?Sized
const unsafe fn new(ptr: *mut T) -> Unique<T>
unique
)Creates a new Unique
.
unsafe fn get(&self) -> &T
unique
)Dereferences the content.
unsafe fn get_mut(&mut self) -> &mut T
unique
)Mutably dereferences the content.
Trait Implementations
impl<T> Send for Unique<T> where T: Send + ?Sized
Unique
pointers are Send
if T
is Send
because the data they
reference is unaliased. Note that this aliasing invariant is
unenforced by the type system; the abstraction using the
Unique
must enforce it.
impl<T> Sync for Unique<T> where T: Sync + ?Sized
Unique
pointers are Sync
if T
is Sync
because the data they
reference is unaliased. Note that this aliasing invariant is
unenforced by the type system; the abstraction using the
Unique
must enforce it.