元件說我有一個目的:指針成在容器
struct Foo
{
int bar_;
Foo(int bar) bar_(bar) {}
};
和我有一個包含Foo
S,或許一個矢量STL容器,以及我採取
// Elsewhere...
vector<Foo> vec;
vec.push_back(Foo(4));
int *p = &(vec[0].bar_)
這是一個可怕的想法,對吧?
原因是vector
會將其元素存儲在動態分配的數組中,最後如果添加了足夠的元素,它將不得不分配另一個數組,複製原始數組的所有元素,並刪除舊的數組。發生這種情況後,p
指向垃圾。這就是爲什麼許多vector
上的操作會使迭代器無效。
現在看來似乎是合理的假設,會從容器迭代器失效的操作也變得無效指針容器元素的數據成員,而如果操作不無效迭代器,這些指針會仍然安全。但是,許多合理的假設是錯誤的。這是他們中的一員嗎?
@Brian:我認爲Pillsy在語義上是正確的,如果不是語法。當你添加到中間時, – quamrana 2010-04-02 14:08:02