为什么 vector.reserve(2) 后跟 v[0] = 2 被认为是不正确的

Why is vector.reserve(2) followed by v[0] = 2 considered incorrect?

本文关键字:认为是 不正确 reserve vector 为什么 后跟      更新时间:2023-10-16

所以据我所知,reserve 不会初始化抽象,而只是分配空间以包含它们。但是,v[0] 不应该总是给你第一个单元化内存,并且不应该给它分配一个值总是有效的吗?

因为reserve不会改变向量的大小。它仅将矢量移动到内存中有足够的空间以允许在必要时增加矢量大小的位置。

如果你想确定你可以调用v[0]=2,甚至v[1]=0,你应该使用resize(2),而不是reserve(2)

因为它调用未定义的行为。 库编写器可以合法地将 begin() 的地址保留为 nullptr,直到您调整大小。 或者将其设置为 0xBAADFOOD。 或者在写入硬盘时格式化硬盘。

现在,更有可能发生的是这是未初始化的内存。 所以没有什么可怕的事情发生,除了调试中的一堆断言,以及向量关于它的状态而没有办法修复它的事实。

相关文章: