假设我有这个:
Object *myObject;
std::vector<Object> objects(99);
....
myObject = &objects[4];
是否可以安全地假设无论 objects[] 有多大,如果我删除了一些,只要我不删除()myObject 指向的实际对象,myObject 的指针将始终有效?或者它的工作方式不同?如果以上方法不起作用,我还能怎样实现呢?这是因为在我的设计中,我希望 child 有一个指向其父项的指针,这是在添加子项时由父项分配的,但是父项在 std::vector 中,我需要随机访问。 std::list 对我来说会更好吗?
谢谢
最佳答案
不,这样假设绝对不安全。
该标准解释了什么会/不会使标准容器上的迭代器失效;任何时候 vector 迭代器失效,指向它的指针也会失效。实际上,这意味着当 vector 调整大小时(包括隐式调用 push_back()
时),任何指向它的迭代器都将失效,您的指针也是如此。同样,调用 erase()
将使删除项之后的指针无效,因为它们都必须向上移动以填充删除的空间。
std::list
会更好;您可以并行维护一个指向项目的指针 vector ,这样您就可以通过索引访问它们,而无需在内存中移动它们。
关于c++ - std::vector 指针可靠吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868287/