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.
Почему это случилось?