[#BloombergLP-bslalg-ScalarPrimitives-destructiveMove]
= xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bslalg.adoc[bslalg]::xref:BloombergLP/bslalg/ScalarPrimitives.adoc[ScalarPrimitives]::destructiveMove
:relfileprefix: ../../../
:mrdocs:

Move the state of the object of the parameterized `TARGET&lowbar;TYPE` from the object at the specified `original` address to the uninitialized memory at the specified `address`, as if by move constructing and then destroying the original&period; If the parameterized `ALLOCATOR` is based on `bslma&colon;&colon;Allocator` and `TARGET&lowbar;TYPE` takes an allocator constructor argument, then the moved object uses the specified `allocator` to supply memory&period; If the move constructor throws, the `address` is left in an uninitialized state and the `original` is left unchanged&period; The behavior is undefined unless the `original` object also uses the `allocator`&period; Note that bit&hyphen;wise copy will be used and `allocator` will be ignored if TARGET&lowbar;TYPE&apos; has the bit&hyphen;wise moveable trait&period; Note that, if `ALLOCATOR` is not based on `bslma&colon;&colon;Allocator`, then the `allocator` argument is ignored&semi; the allocator used by the resulting object at `address` might or might not be the same as the allocator used by `original`, depending on whether `TARGET&lowbar;TYPE` has a move constructor (C&plus;&plus;11)&period;

== Synopsis

Declared in `&lt;bslalg&lowbar;scalarprimitives&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class TARGET&lowbar;TYPE,
    class ALLOCATOR&gt;
static
void
destructiveMove(
    TARGET&lowbar;TYPE* address,
    TARGET&lowbar;TYPE* original,
    ALLOCATOR* allocator);
----


[.small]#Created with https://www.mrdocs.com[MrDocs]#
