- 620 名前:はちみつ餃子 mailto:sage [2025/09/08(月) 10:27:54.64 ID:bx3qX9/R0.net]
- 状況を一から説明すると……
これは fifth が古い無効になった場所を参照する可能性があることが問題。 std::vector の各要素は連続した空間に配置されることが保証されている。 要素の増減でその場所の都合が悪くなれば再配置される可能性があり、 再配置が起こったときは要素を指していたイテレータや参照は無効になるというルール。 無効なイテレータや参照を通じてアクセスしたら何が起こるかわからない。 再配置が起こる可能性がある操作については個々に仕様に書かれているけれど、 キャパシティを変更する (可能性がある) ような操作はどれも再配置が起こりえると覚えておけばいい。 そんでもってこれのややこしいところは「可能性がある」ってところで、 キャパシティをどれくらい拡大するか実装によって差があるし、 状況によっては場所を移動せずに大きさを伸ばせるかもしれない。 つまり問題が顕在化しないかもしれない。 一般論として倍々に延ばす実装がよく知られているからこの例では最初に要素を 8 個にして 顕在化しやすいようにしたんだろう。
|

|