Function core::mem::uninitialized

1.0.0 · source · []
pub unsafe fn uninitialized<T>() -> T
👎 Deprecated since 1.39.0:

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.

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.)