我希望程序打印数字0到99,但是当我运行代码时,我看到100行99

mrd*_*abd 2 c++ pointers object

我有一节课foo:

class foo{
public:
        int i;
};
Run Code Online (Sandbox Code Playgroud)

一节课bar:

class bar{
public:
        foo* foo_;
};
Run Code Online (Sandbox Code Playgroud)

和类似的代码:

int i=0;
vector<bar*> fs;
while(i<100){
    foo f;
    f.i = i;
    bar* b = new bar;
    b->foo_ = &f;
    fs.push_back(b);
    i++;
}
Run Code Online (Sandbox Code Playgroud)

我希望每个都bar->foo_指的是不同的foo,所以当我有:

 for(i=0;i<fs.size();i++){
     cout << (fs[i]->foo_->i) << "\n";
 }
Run Code Online (Sandbox Code Playgroud)

我希望程序打印数字0到99,但当我运行代码我看到100行99!

为什么所有指针都指向最后一个对象?

us2*_*012 6

foo f;在技​​术上已经死了,当循环的当前迭代结束时,它们会超出范围.

你的指针都是最后一个对象的原因是因为f在下面的迭代中分配似乎总是覆盖前一个,但是你也不能依赖它.你正在做什么导致未定义的行为.