std :: vector中的第一个元素被破坏

时间:2017-02-27 11:18:59

标签: c++ vector

我有以下代码:

#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是否应该可靠?

0 个答案:

没有答案