説明のために、以下に簡単なプログラムを書きました。
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;
}
asにはA の3 つのインスタンスが含まれていると思います。
しかし、最初の要素のポインターxは、2 回目の push_backが呼び出された後にその参照 (書き込まれたダミー値) を失い、3 回目の反復で例外がスローされます。
これはfor ループの前にas.reserve(3)を追加することで解決されます。
なぜこれが起こったのですか?