3

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

4

2 回答 2

9

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

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

于 2012-11-22T02:13:00.487 回答
1

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

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

于 2012-11-22T02:33:10.687 回答