already_AddRefed

Struct already_AddRefed 

Source
#[repr(C)]
pub struct already_AddRefed<T> { pub _phantom_0: PhantomData<UnsafeCell<T>>, pub mRawPtr: *mut T, }
Expand description

already_AddRefed cooperates with reference counting smart pointers to enable you to assign in a pointer without |AddRef|ing it. You might want to use this as a return type from a function that returns an already |AddRef|ed pointer. Or, you might want to use this as a parameter type in a function that wants to force a transfer-of-ownership from a RefPtr in the caller (for example, if the function expects callers to pass in a newly-created object, which the function then takes ownership of).

TODO Move already_AddRefed to namespace mozilla. This has not yet been done because of the sheer number of usages of already_AddRefed.

When should you use already_AddRefed<>?

  • Ensure a consumer takes ownership of a reference
  • Pass ownership without calling AddRef/Release (sometimes required in off-main-thread code)
  • The ref pointer type you’re using doesn’t support move construction

Otherwise, use std::move(RefPtr/nsCOMPtr/etc).

Fields§

§_phantom_0: PhantomData<UnsafeCell<T>>§mRawPtr: *mut T

Trait Implementations§

Source§

impl<T: Debug> Debug for already_AddRefed<T>

Source§

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

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

impl<T: PartialEq> PartialEq for already_AddRefed<T>

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T> StructuralPartialEq for already_AddRefed<T>

Auto Trait Implementations§

§

impl<T> Freeze for already_AddRefed<T>

§

impl<T> !RefUnwindSafe for already_AddRefed<T>

§

impl<T> !Send for already_AddRefed<T>

§

impl<T> !Sync for already_AddRefed<T>

§

impl<T> Unpin for already_AddRefed<T>
where T: Unpin,

§

impl<T> UnwindSafe for already_AddRefed<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> Filterable for T

Source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. 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, 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.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 8 bytes