繁体   English   中英

访问`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

如果不是,是否有比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 ++支持库中,向量和它的迭代器将在调试模式下调用abort() ,因为您违反了不变断言。

所以不要这样做。

如果只需要未初始化的大块,则仍然可以使用new char[size]unique_ptr

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM