オブジェクトのベクトルと、それらのオブジェクトへのポインターの別のベクトルを作成したいとしましょう (動的メモリは使用できません)。私がそれを行う方法は、次の例です。
#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
が間違っています。なお、大本数は毎回変わります。この未定義の動作を引き起こすものは何もありません。誰かが私が間違っていることを教えてもらえますか?