首页 > 解决方案 > 访问`std::vector`的保留但未调整大小的内存作为原始内存是否安全?

问题描述

如果一个人想要分配一块内存而不将其初始化为零,那么执行以下操作是否安全?

std::vector<uint8_t> block(0);
block.reserve(10000000);
// now access block.data()[0] through block.data()[9999999] as raw uninitialized memory

如果没有,是否有比malloc和更新的工具来完成这项工作free

标签: c++memory-managementc++14stdvector

解决方案


如果你有编译时间常数和相对较小的尺寸,你可以使用std::array

std::array<uint8_t,10000> block;

如果不使用原始内存:

std::unique_ptr<uint8_t[]> block( new uint8_t[size] );

或在 c++14 之后

auto block = std::make_unique<uint8_t[]>( size );

推荐阅读