我在下面写了一个简单的程序来解释。
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)的问题。
为什么会这样?