Struct Arc

Source
pub struct Arc<T: ?Sized> { /* private fields */ }
Expand description

A thread-safe reference-counted pointer.

Trait Implementations§

Source§

impl<T: ?Sized> AsRef<T> for Arc<T>

Source§

fn as_ref(&self) -> &T

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<T: ?Sized> Borrow<T> for Arc<T>

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T: ?Sized> Clone for Arc<T>

Source§

fn clone(&self) -> Arc<T>

Makes a clone of the Arc pointer.

This creates another pointer to the same allocation, increasing the reference count.

1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: ?Sized + Debug> Debug for Arc<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: Default> Default for Arc<T>

Source§

fn default() -> Arc<T>

Creates a new Arc<T>, with the Default value for T.

§Examples
use std::sync::Arc;

let x: Arc<i32> = Default::default();
assert_eq!(*x, 0);
Source§

impl<T: ?Sized> Deref for Arc<T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &T

Dereferences the value.
Source§

impl<T: ?Sized + Display> Display for Arc<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: ?Sized> Drop for Arc<T>

Source§

fn drop(&mut self)

Drops the Arc.

This will decrement the reference count.

§Examples
use std::sync::Arc;

struct Foo;

impl Drop for Foo {
    fn drop(&mut self) {
        println!("dropped!");
    }
}

let foo  = Arc::new(Foo);
let foo2 = Arc::clone(&foo);

drop(foo);    // Doesn't print anything
drop(foo2);   // Prints "dropped!"
Source§

impl<T> From<T> for Arc<T>

Source§

fn from(t: T) -> Self

Converts to this type from the input type.
Source§

impl<T: ?Sized + Hash> Hash for Arc<T>

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<T: ?Sized> Into<Arc<T>> for UniqueArc<T>

Source§

fn into(self) -> Arc<T>

Converts this type into the (usually inferred) input type.
Source§

impl<T: ?Sized> IntoMut<T> for Arc<T>

Source§

unsafe fn get_mut_unchecked(this: &Self) -> &mut T

Obtain a mutable reference to the wrapped value without performing runtime checks for upholding any invariants.

Safety: Calling this is safe if and only if can_make_mut returns true.

Source§

type MutablePointer = UniqueArc<T>

Source§

fn can_make_mut(this: &Self) -> bool

Check whether converting into a mutable version would succeed.
Source§

unsafe fn into_mut_unchecked(this: Self) -> Self::MutablePointer

Convert into a mutable version without performing runtime checks for upholding any invariants. Read more
Source§

fn into_mut(this: Self) -> Result<Self::MutablePointer, Self>

Try converting into a mutable version of the pointer.
Source§

fn get_mut(this: &Self) -> Option<&mut T>

Try obtaining a mutable reference to the wrapped value.
Source§

impl<T: ?Sized + Ord> Ord for Arc<T>

Source§

fn cmp(&self, other: &Arc<T>) -> Ordering

Comparison for two Arcs.

The two are compared by calling cmp() on their inner values.

1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<T: ?Sized + PartialEq> PartialEq for Arc<T>

Source§

fn eq(&self, other: &Arc<T>) -> bool

Equality for two Arcs.

Two Arcs are equal if their inner values are equal, even if they are stored in different allocation. This implementation does not check for pointer equality.

Source§

fn ne(&self, other: &Arc<T>) -> bool

Inequality for two Arcs.

Two Arcs are unequal if their inner values are unequal. This implementation does not check for pointer equality.

Source§

impl<T: ?Sized + PartialOrd> PartialOrd for Arc<T>

Source§

fn partial_cmp(&self, other: &Arc<T>) -> Option<Ordering>

Partial comparison for two Arcs.

The two are compared by calling partial_cmp() on their inner values.

Source§

fn lt(&self, other: &Arc<T>) -> bool

Less-than comparison for two Arcs.

The two are compared by calling < on their inner values.

Source§

fn le(&self, other: &Arc<T>) -> bool

‘Less than or equal to’ comparison for two Arcs.

The two are compared by calling <= on their inner values.

Source§

fn gt(&self, other: &Arc<T>) -> bool

Greater-than comparison for two Arcs.

The two are compared by calling > on their inner values.

Source§

fn ge(&self, other: &Arc<T>) -> bool

‘Greater than or equal to’ comparison for two Arcs.

The two are compared by calling >= on their inner values.

Source§

impl<T: ?Sized> Pointer for Arc<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: ?Sized> ReferenceCounted<T> for Arc<T>

Source§

fn reference_count(this: &Self) -> usize

Get the number of owning pointers referring to the same allocation. Read more
Source§

impl<T: ?Sized> SmartPointer<T> for Arc<T>

Source§

fn new(data: T) -> Arc<T>
where T: Sized,

Construct a new smart pointer, containing the given value.
Source§

fn try_unwrap(this: Self) -> Result<T, Self>
where T: Sized,

Try to obtain ownership of the wrapped value. Read more
Source§

fn ptr_eq(a: Self, b: Self) -> bool

Returns whether two smart pointers point to the same location in memory. Read more
Source§

impl<T: ?Sized + Eq> Eq for Arc<T>

Source§

impl<T: ?Sized + Sync + Send> Send for Arc<T>

Source§

impl<T: ?Sized + Sync + Send> Sync for Arc<T>

Source§

impl<T: ?Sized> Unpin for Arc<T>

Auto Trait Implementations§

§

impl<T> Freeze for Arc<T>
where T: ?Sized,

§

impl<T> RefUnwindSafe for Arc<T>
where T: RefUnwindSafe + ?Sized,

§

impl<T> UnwindSafe for Arc<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<!> for T

Source§

fn from(t: !) -> T

Converts to this type from the input type.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.