可移动元素的向量是否会有效调整大小?

时间:2013-06-09 13:46:00

标签: c++ c++11 move-semantics

我们假设T是可移动的对象:

vector<T> v;
v.resize(...) 

如果需要重新分配,那么该代码会调用副本,还是在所有元素上移动构造函数?

如果答案是“移动构造函数”,那么编译器如何知道它应该使用这个?

1 个答案:

答案 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));
    }
}

http://ideone.com/dyF6JI

如果std::vector使用了复制构造函数,则不会编译此代码。

  

如果答案是“移动构造函数”,那么编译器如何知道它应该使用这个?

std::vector可以使用std::move

如果它使用std::move但没有移动构造函数,它将等同于仅使用复制构造函数