c++ - 访问 `std::vector` 的保留但未调整大小的内存作为原始内存是否安全?

标签 c++ memory-management c++14 stdvector

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

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

如果没有,是否有比 mallocfree 更新的工具来完成这项工作?

最佳答案

如果你有编译时间常数和相对较小的尺寸,你可以使用 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 );

关于c++ - 访问 `std::vector` 的保留但未调整大小的内存作为原始内存是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052047/

相关文章:

c++ - 用于桌面应用程序的 Twitter API 库?

c - C 中的动态数组

c - 从上一个索引到当前索引搜索数组

c++ - 如何在 Windows 10 操作系统上使用 Bazel 调试 C++ 代码

c++ - 是否可以指定一个空的 std::vector 作为默认参数?

c++ - 为什么 c++ 将大数四舍五入到 ceil 并将小数四舍五入到地板

c# - Java是否允许直接内存访问

c++ - 组合多个类模板特化

c++ - std::async 参数的生命周期是多少?

C++调用静态方法