#[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 TTrait Implementations§
Source§impl<T> Debug for already_AddRefed<T>where
T: Debug,
impl<T> Debug for already_AddRefed<T>where
T: Debug,
Source§impl<T> PartialEq for already_AddRefed<T>where
T: PartialEq,
impl<T> PartialEq for already_AddRefed<T>where
T: PartialEq,
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>where
T: RefUnwindSafe + UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
impl<T> ErasedDestructor for Twhere
T: 'static,
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