pub struct VBox<T: ?Sized + VTableMetaDrop> { /* private fields */ }
Expand description
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
function (so that the #[vtable]
macro
implements the VTableMetaDrop
trait for it)
Implementations§
source§impl<T: ?Sized + VTableMetaDrop> VBox<T>
impl<T: ?Sized + VTableMetaDrop> VBox<T>
sourcepub fn new<X: HasStaticVTable<T>>(value: X) -> Self
pub fn new<X: HasStaticVTable<T>>(value: X) -> Self
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)
sourcepub unsafe fn from_raw(vtable: NonNull<T::VTable>, ptr: NonNull<u8>) -> Self
pub unsafe fn from_raw(vtable: NonNull<T::VTable>, ptr: NonNull<u8>) -> Self
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.
sourcepub fn borrow_mut(&mut self) -> VRefMut<'_, T>
pub fn borrow_mut(&mut self) -> VRefMut<'_, T>
Gets a VRefMut pointing to this box