`make_unique_for_overwrite` 仍然初始化 `std::pair` 元素

Vog*_*ang 5 c++ memory c++20

我希望

auto myPairs = make_unique_for_overwrite<pair<uint64_t, void*>>[]>(arraySize);
Run Code Online (Sandbox Code Playgroud)

会给我的pairs未初始化的内存。无论如何,我稍后会覆盖它们,并且(不必要的)初始化目前对我的算法的 600 毫秒整体运行时间中的 120 毫秒负责。

避免这种初始化的最惯用的方法是什么?

Hol*_*Cat 5

根据cppreferencestd::pair总是值初始化(又名零)其元素的默认构造函数。

解决方案是摆脱pair. 您可以将其替换为具有两个成员的结构。

我知道我仍然可以分配......然后 reinterpret_cast

尝试使用reinterpret_cast这种结构std::pair会导致未定义的行为。