Function core::mem::uninitialized
1.0.0 · source · [−]pub unsafe fn uninitialized<T>() -> T
use mem::MaybeUninit
instead
Expand description
Bypasses Rust’s normal memory-initialization checks by pretending to
produce a value of type T
, while doing nothing at all.
This function is deprecated. Use MaybeUninit<T>
instead.
It also might be slower than using MaybeUninit<T>
due to mitigations that were put in place to
limit the potential harm caused by incorrect use of this function in legacy code.
The reason for deprecation is that the function basically cannot be used
correctly: it has the same effect as MaybeUninit::uninit().assume_init()
.
As the assume_init
documentation explains,
the Rust compiler assumes that values are properly initialized.
As a consequence, calling e.g. mem::uninitialized::<bool>()
causes immediate
undefined behavior for returning a bool
that is not definitely either true
or false
. Worse, truly uninitialized memory like what gets returned here
is special in that the compiler knows that it does not have a fixed value.
This makes it undefined behavior to have uninitialized data in a variable even
if that variable has an integer type.
(Notice that the rules around uninitialized integers are not finalized yet, but
until they are, it is advisable to avoid them.)