1

私はいくつかのクラスの std::vector を持っています。私のプログラムでは、ベクトル内のいくつかのアイテムへのポインターをいくつか持っています。問題は、最初のアイテムなどの 1 つのアイテムを削除すると、すべてのポインターが間違っていることです。コード:

vector<int> numbers;
numbers.push_back(100);
numbers.push_back(200);
numbers.push_back(300);

int *pNum = & numbers[1]; // pNum pointer to 200

numbers.erase(numbers.begin()); // now pNum pointer to 300

なぜそうなるのか理解できました。問題は、問題を解決する方法があるかどうかです。

4

2 に答える 2

0

ベクトルにポインターを保存できます。このようにして、データをベクトルから分離し、参照が実際のデータを指します。

vector<int*> numbers;

numbers.push_back(new int(100));
numbers.push_back(new int(200));
numbers.push_back(new int(300));

int * pNum  = numbers[1];

// memory leak!!!
numbers.erase( numbers.begin() );

cout << *pNum << endl;

C++11 を使用している場合はshared_ptr、生のポインターの代わりに s を配置しても安全です。

于 2013-07-04T13:55:14.307 に答える