考虑这个函数来说明这个案例:
void appendAndPrint(std::vector<int> &v, int number)
{
v.push_back(number); // let there has been a reallocation
std::cout << v.back(); // does the local reference v become invalid here?
// is it safe, for example, to call here push_back() with v once again, like
// v.push_back(number);
}
然后用一些向量调用它:
std::vector<int> vec;
appendAndPrint(vec, 5);
第一次向量重新分配后传递给函数的引用是否无效?
编辑:
这种结构经常被使用,但在C ++标准中引用了这种安全性吗?
所有提到的是容器元素的引用/指针/迭代器的生命周期。
答案 0 :(得分:3)
Iterators and references to elements are invalidated,但不是容器本身。这是正常的代码。
答案 1 :(得分:1)
对向量的引用仍然有效。
如果向向量缓冲区的某些部分有任何指针或引用(包括迭代器),则重新分配会使这些指针或引用无效,这可能是push_back
的结果。
但是,您不会显示任何此类指针或对缓冲区的引用。