0

説明のために、以下に簡単なプログラムを書きました。

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)を追加することで解決されます。

なぜこれが起こったのですか?

4

0 に答える 0