我们假设T
是可移动的对象:
vector<T> v;
v.resize(...)
如果需要重新分配,那么该代码会调用副本,还是在所有元素上移动构造函数?
如果答案是“移动构造函数”,那么编译器如何知道它应该使用这个?
答案 0 :(得分:6)
#include <vector>
#include<memory>
int main() {
std::vector<std::unique_ptr<int>> v;
for(int i = 0; i < 1000; ++i) {
v.push_back(std::unique_ptr<int>(new int));
}
}
如果std::vector
使用了复制构造函数,则不会编译此代码。
如果答案是“移动构造函数”,那么编译器如何知道它应该使用这个?
std::vector
可以使用std::move
如果它使用std::move
但没有移动构造函数,它将等同于仅使用复制构造函数