pub trait ManagedType<M>: Sizedwhere
M: ManagedTypeApi,{
type OwnHandle: HandleConstraints;
// Required methods
fn get_handle(&self) -> Self::OwnHandle;
unsafe fn forget_into_handle(self) -> Self::OwnHandle;
fn transmute_from_handle_ref(handle_ref: &Self::OwnHandle) -> &Self;
fn transmute_from_handle_ref_mut(
handle_ref: &mut Self::OwnHandle,
) -> &mut Self;
// Provided methods
fn get_raw_handle(&self) -> i32 { ... }
fn as_ref(&self) -> ManagedRef<'_, M, Self> { ... }
}
Expand description
Commonalities between all managed types.
Required Associated Types§
Required Methods§
fn get_handle(&self) -> Self::OwnHandle
Sourceunsafe fn forget_into_handle(self) -> Self::OwnHandle
unsafe fn forget_into_handle(self) -> Self::OwnHandle
Forgets current object (does not run destructor), but extracts the handle.
The handle remains an owned object, so the handle’s destructor will run later, when dropped.
§Safety
Destructures the object, without running a constructor.
To avoid a memory leak, it is necessary for the object to be later reconstructed from handle and its destructor run.
It is designed to be used ManagedVec and ManagedOption, where items are dropped later, together with their container.
Sourcefn transmute_from_handle_ref(handle_ref: &Self::OwnHandle) -> &Self
fn transmute_from_handle_ref(handle_ref: &Self::OwnHandle) -> &Self
Implement carefully, since the underlying transmutation is an unsafe operation. For types that wrap a handle to some VM-managed data, make sure the type only contains the handle (plus ZSTs if necessary). For types that just wrap another managed type it is easier, call for the wrapped object.
fn transmute_from_handle_ref_mut(handle_ref: &mut Self::OwnHandle) -> &mut Self
Provided Methods§
fn get_raw_handle(&self) -> i32
fn as_ref(&self) -> ManagedRef<'_, M, Self>
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.