[][src]Struct vtable::VBox

#[repr(transparent)]pub struct VBox<T: ?Sized + VTableMetaDrop> { /* fields omitted */ }

An equivalent of a Box that holds a pointer to a VTable and a pointer to an instance. A VBox frees the instance when dropped.

The type parameter is supposed to be the VTable type.

The VBox implements Deref so one can access all the members of the vtable.

This is only valid if the VTable has a drop type (so that the #[vtable] macro implements the VTableMetaDrop trait for it)

Implementations

impl<T: ?Sized + VTableMetaDrop> VBox<T>[src]

pub fn new<X: HasStaticVTable<T>>(value: X) -> Self[src]

Create a new VBox from an instance of a type that can be associated with a VTable.

Will move the instance on the heap.

(the HasStaticVTable is implemented by the “MyTrait”VTable_static! macro generated by the #vtable macro)

pub unsafe fn from_raw(vtable: NonNull<T::VTable>, ptr: NonNull<u8>) -> Self[src]

Create a new VBox from raw pointers

Safety

The ptr needs to be a valid object fitting the vtable. ptr must be properly allocated so it can be dropped.

pub fn borrow(&self) -> VRef<'_, T>[src]

Gets a VRef pointing to this box

pub fn borrow_mut(&mut self) -> VRefMut<'_, T>[src]

Gets a VRefMut pointing to this box

pub fn leak(self) -> VRefMut<'static, T>[src]

Leaks the content of the box.

Trait Implementations

impl<T: ?Sized + VTableMetaDrop> Deref for VBox<T>[src]

type Target = T::Target

The resulting type after dereferencing.

impl<T: ?Sized + VTableMetaDrop> DerefMut for VBox<T>[src]

impl<T: ?Sized + VTableMetaDrop> Drop for VBox<T>[src]

Auto Trait Implementations

impl<T: ?Sized> RefUnwindSafe for VBox<T> where
    <T as VTableMeta>::Target: RefUnwindSafe

impl<T> !Send for VBox<T>

impl<T> !Sync for VBox<T>

impl<T: ?Sized> Unpin for VBox<T> where
    <T as VTableMeta>::Target: Unpin

impl<T: ?Sized> UnwindSafe for VBox<T> where
    <T as VTableMeta>::Target: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.