当std :: vector增长时,其中的元素的地址不再有效吗?

Pal*_*han 2 c++ vector dangling-pointer

假设我有以下内容:

struct Foo {
Foo () : bar(NULL), box(true) {}
Bar* bar;
bool box;
};
Run Code Online (Sandbox Code Playgroud)

我宣布以下内容:

std::vector<Foo> vec(3);
Run Code Online (Sandbox Code Playgroud)

我现在有一个功能,它做了这样的事情:

Foo& giveFoo() { //finds a certain foo and does return vec[i]; }
Run Code Online (Sandbox Code Playgroud)

然后调用者将Foo其通过引用获得的地址传递Foo*给其他人.然而,我想知道的是,如果这个指针Foo在触发向量增长后仍然有效vec吗?如果现有的Foo元素vec被复制,那么大概Foo*是浮动的那个现在会悬空?是这种情况吗?我正在调试一个应用程序,但无法重现这个.

Vau*_*ato 5

重新分配向量时,任何指针或对元素的引用都将失效,就像任何迭代器一样.