我有以下代码:
#include <iostream>
#include <vector>
struct A;
struct B {
B(A *a) : a_(a) { id_ = rand(); }
int id_;
A *a_;
};
struct A {
A() { id_ = rand(); }
int id_;
std::vector<B> b_list;
};
int main() {
std::vector<A> a_list;
//a_list.reserve(4); // Works
for (int i = 0; i < 4; i++) {
a_list.push_back(A());
A *a = &a_list.back();
a->b_list.push_back(B(a));
std::cout << a->id_ << " - " << a->b_list.front().a_->id_ << std::endl;
}
for(A &a : a_list) {
std::cout << a.id_ << " - " << a.b_list.front().a_->id_ << std::endl;
}
}
对象A中的向量包含B。并且B包含一个指向父对象A的指针。 A的第一次推回后一切都很好。在第二次push_back之后,如果通过A - &gt;访问,则第一个对象A是不可读的。 B - &gt;甲
这只发生在第一个对象上,以下似乎没问题。 如果我在插入元素之前使用“a_list.reserve(4)”,则不会发生这种情况。
为什么第一个元素中的指针被破坏了。如果不使用保留,std :: vector是否应该可靠?