C ++向量丢失堆分配的指针

时间:2015-12-02 10:09:16

标签: c++ rule-of-three

我在下面写了一个简单的程序来解释。

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 包含3个 A 的实例 但是,在调用第二个 push_back 之后,第一个元素的指针 x 会丢失其引用(写入虚拟值),并在第3次迭代时抛出异常。

解决了在for循环之前添加 as.reserve(3)的问题。

为什么会这样?

0 个答案:

没有答案