访问"std::vector"的保留但未调整大小的内存作为原始内存是否安全?
Is it safe to access a `std::vector`'s reserved but not sized-in memory, as raw memory?
如果要分配内存块而不将其初始化为零,执行以下操作是否安全?
std::vector<uint8_t> block(0);
block.reserve(10000000);
// now access block.data()[0] through block.data()[9999999] as raw uninitialized memory
如果没有,是否有比malloc
和free
更新的工具
如果你有编译时常数和相对较小的大小,你可以使用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++支持库中,向量及其迭代器将在调试模式下调用abort()
,因为您违反了不变断言。
所以不要这样做。
如果你只想要大的未初始化块,你仍然可以使用new char[size]
和unique_ptr
相关文章:
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- 有没有办法从 STL 获取无开销的原始内存容器
- 访问"std::vector"的保留但未调整大小的内存作为原始内存是否安全?
- 将 std::vector<int> 从原始内存转换为数组
- 如何重复使用原始输入缓冲区内存?
- 可以通过非原始指针来增强容器矢量管理内存
- 是否可以反序列化(从原始内存块)没有默认构造函数的对象?
- 可以在C++中比较原始内存
- 用于操作原始内存的正确数据类型
- 如何从内存中读取原始图像 (YUV 4:2:2) 格式的图像数据
- C 中的非原始内存
- 用C++中的std::unique_ptr管理原始内存
- 为什么在按值传递指针之后再按引用传递指针会指向原始内存位置
- 如何序列化为原始内存块
- 使用原始内存地址查找指针/类
- 从原始内存和类分析器推断基元类型
- 将指针插入原始内存
- 如何打印QImage的所有原始数据,以便在内存中进行比较
- 使用这样的'delete'会释放原始分配的内存吗?
- 提升进程间托管共享内存原始指针作为类成员