元件说我有一个目的:指针成在容器
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