Struct std::boxed::IntermediateBox
[−]
[src]
pub struct IntermediateBox<T> where T: ?Sized { /* fields omitted */ }
🔬 This is a nightly-only experimental API. (placement_in
)
placement box design is still being worked out.
IntermediateBox
represents uninitialized backing storage for Box
.
FIXME (pnkfelix): Ideally we would just reuse Box<T>
instead of
introducing a separate IntermediateBox<T>
; but then you hit
issues when you e.g. attempt to destructure an instance of Box
,
since it is a lang item and so it gets special handling by the
compiler. Easier just to make this parallel type for now.
FIXME (pnkfelix): Currently the box
protocol only supports
creating instances of sized types. This IntermediateBox is
designed to be forward-compatible with a future protocol that
supports creating instances of unsized types; that is why the type
parameter has the ?Sized
generalization marker, and is also why
this carries an explicit size. However, it probably does not need
to carry the explicit alignment; that is just a work-around for
the fact that the align_of
intrinsic currently requires the
input type to be Sized (which I do not think is strictly
necessary).
Trait Implementations
impl<T> BoxPlace<T> for IntermediateBox<T>
[src]
fn make_place() -> IntermediateBox<T>
placement_new_protocol
)Creates a globally fresh place.
impl<T> Place<T> for IntermediateBox<T>
[src]
fn pointer(&mut self) -> *mut T
placement_new_protocol
)Returns the address where the input value will be written. Note that the data at this address is generally uninitialized, and thus one should use ptr::write
for initializing it. Read more
impl<T> InPlace<T> for IntermediateBox<T>
[src]
type Owner = Box<T>
placement_new_protocol
)Owner
is the type of the end value of in (PLACE) EXPR
Read more
unsafe fn finalize(self) -> Box<T>
placement_new_protocol
)Converts self into the final value, shifting deallocation/cleanup responsibilities (if any remain), over to the returned instance of Owner
and forgetting self. Read more