Struct ArcShiftWeak

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

ArcShiftWeak is a way to keep a pointer to an object without preventing said object from being deallocated. This can be useful when creating cyclic data structure, to avoid memory leaks.

let original_instance = ArcShift::new("test");
let light_instance = ArcShift::downgrade(&original_instance);
let mut instance = light_instance.upgrade().unwrap();
println!("Value: {:?}", instance.get());

WARNING! Because of implementation reasons, each instance of ArcShiftWeak will claim a memory equal to size_of::<T> (plus 5 words), even if the value inside it has freed, and even if all other instances of ArcShift/ArcShiftWeak have been dropped. If this limitation is unacceptable, consider using ArcShiftWeak<Box<T>> as your datatype, or possibly using a different crate.

Implementations§

Source§

impl<T: ?Sized> ArcShiftWeak<T>

Source

pub fn upgrade(&self) -> Option<ArcShift<T>>

Upgrade this ArcShiftWeak instance to a full ArcShift. This is required to be able to access any stored value. If the ArcShift instance has no value (because the last ArcShift instance had been deallocated), this method returns None.

Trait Implementations§

Source§

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

Source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<T> Debug for ArcShiftWeak<T>
where T: Debug + ?Sized,

Source§

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

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

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

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

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

SAFETY: If T is Sync and Send, ArcShiftWeak<T> can also be Send

Source§

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

SAFETY: If T is Sync and Send, ArcShiftWeak<T> can also be Sync

Auto Trait Implementations§

§

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

§

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

§

impl<T> Unpin for ArcShiftWeak<T>
where T: ?Sized,

§

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

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