【发布时间】:2013-09-29 20:29:14
【问题描述】:
我有一堂课foo:
class foo{
public:
int i;
};
还有一个班级bar:
class bar{
public:
foo* foo_;
};
和类似的代码:
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++;
}
我希望每个bar->foo_ 引用不同的foo,所以当我有时:
for(i=0;i<fs.size();i++){
cout << (fs[i]->foo_->i) << "\n";
}
我希望程序打印数字 0 到 99,但是当我运行代码时,我看到 100 行 99!!
为什么所有指针都指向最后一个对象?
【问题讨论】:
-
你为什么期望 99?您编写的代码应该返回 100 行。
-
尝试让 foo 也成为指针
foo* f = new f -
f在 while 的每次迭代结束后不再可用。您正在保存“死”对象的地址。我认为这是未定义的行为