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!
为什么所有指针都指向最后一个对象?
你foo f;在技术上已经死了,当循环的当前迭代结束时,它们会超出范围.
你的指针都是最后一个对象的原因是因为f在下面的迭代中分配似乎总是覆盖前一个,但是你也不能依赖它.你正在做什么导致未定义的行为.