我有一些类的std::vector,在我的程序中我有一些指向vector中多个项目的指针,问题是当我删除一个项目(例如第一个项目)时,所有指针都错了,这是一个示例码:
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
我了解为什么会发生,问题是是否有解决问题的方法?
最佳答案
您可以将指针保存在 vector 中。这样,您就可以将数据与 vector 分离,并且参考点指向真实数据。
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
而不是原始指针是安全的。