可能是重复的问题:
移动vector会使迭代器失效吗?
考虑以下代码:
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
在第12行中,vec.data() != data
是否可能出现?同样地,
std::vector<T> buffer;
// ... Fill in buffer ...
T* data = buffer.data();
auto vec = std::move(buffer);
// line 5
第5行中的vec.data() != data
是否可能呢?在libstdc++和libc++的实现中,这两者实际上都是不可能的,因为移动构造函数被实现为简单的指针赋值。但似乎标准没有对此进行任何规定(类似于移动std::vector时是否需要保留容量?)。“常数复杂度”能保证vec.data() == data
吗?