c++ - 可 move 元素的 vector 会有效地调整大小吗?

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

假设 T 是可 move 的对象:

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

如果需要重新分配,那么该代码会在所有元素上调用复制或 move 构造函数吗?

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

最佳答案

#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 使用复制构造函数,则不会编译此代码。

If the answer is "move constructor" then how does the compiler know that it should use this one?

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

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

关于c++ - 可 move 元素的 vector 会有效地调整大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17010269/

相关文章:

c++ - 如何为 ostream 创建 lambda?

c++ - 自定义对象的 vector

c++ - 我可以将 final 关键字应用于 C++11 中的 POD(标准布局)结构吗?我是不是该?

c++ - 使用 C++98 将 vector 的一部分 move (而不是复制)到另一个 vector

c++ - 隐藏单个函数背后的 move 语义

c++ - 我如何在 linux 中创建一个 unicode 文件名?

C++模板模板推断类型参数

c++ - 如何使用 C++ 11 的 using 模板函数关键字来删除作用域中的 namespace

c++ - 本地类模板

c++ - 这个不可复制的 map 是否合法 c++11? GCC 4.7 和 MSVS 2010 允许它。 Clang 3.1 没有