可能重复:
移动向量是否会使迭代器无效?
考虑以下代码:
std::vector<T> prepare(T*& data) {
std::vector<T> buffer;
// Fill in buffer.
data = buffer.data();
return buffer;
}
...
T* data;
auto vec = prepare(data);
// line 12
有可能vec.data() != data
在第12行吗?相似地,
std::vector<T> buffer;
// ... Fill in buffer ...
T* data = buffer.data();
auto vec = std::move(buffer);
// line 5
有可能vec.data() != data
在第5行吗?
实际上两者在 libstdc++ 和 libc++ 的实现中都是不可能的,因为移动构造函数被实现为简单的指针赋值,但似乎标准没有指定任何内容(类似于移动 std 时需要保留的容量: :向量?)。“恒定的复杂性”可以保证vec.data() == data
吗?