假设我想创建一个对象向量和另一个指向这些对象的指针向量(我不能使用动态内存)。我会这样做的方式是在下面的例子中。
#include <iostream>
#include <vector>
using namespace std;
class Foo {
public:
int bar;
Foo(int x) : bar(x) {
}
};
int main () {
vector<Foo> foos;
vector<Foo*> pFoos;
for (int i = 0; i < 10; i++) {
Foo foo(i);
foos.push_back(foo);
pFoos.push_back(&foos.back());
}
for (int i = 0; i < 10; i++) {
cout << foos[i].bar << endl;
cout << pFoos[i]->bar << endl;
}
}
我认为这应该可行,因为foos
存储了对象的副本,然后我存储了对副本的引用(因为原始文件foo
将是未定义的,所以我不应该存储对它的引用)。但这就是我得到的:
0
36741184
1
0
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
第一个数字pFoos
是错误的。此外,大数字每次都在变化。我没有看到任何会导致这种未定义行为的东西。有人可以告诉我我做错了什么吗?