我有一些类的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而不是原始指针是安全的。

07-24 09:44
查看更多