C++ вектор теряет кучу выделенного указателя

Я написал простую программу ниже для объяснения.

class A{
public:
    int *x;

    A(){ x = 0; }
    ~A(){ delete x; }

    void foo(){
        x = new int();
        *x = 99;
    }
};

int main(){
    std::vector<A> as;
    for (int i = 0; i < 3; ++i){
        as.push_back(A());
        as.back().foo();
    }
    return 0;
}

Я ожидаю, что, поскольку содержит 3 экземпляра А.
Но указатель x первого элемента теряет свою ссылку (записанное фиктивное значение) после вызова второго push_back, и на 3-й итерации выдается исключение.

Это решено добавлением as.reserve(3) перед циклом for.

Почему это случилось?

0 ответов

Другие вопросы по тегам