将自动分配的std :: vector转换为动态分配的std :: vector,而无需复制开销

时间:2016-10-21 19:40:47

标签: c++ memory-management vector stl c++14

这里我有一个自动分配的std::vector v。现在有没有办法从std::vector构造另一个动态分配的v,这样就不会有复制构造函数的开销。

std::vector<int> v(3);
std::vector<int>* v2 = new std::vector<int>(v);
  1. 调用v的破坏者时会发生什么?
  2. 有人可以在移动构造函数std :: vector。
  3. 或者我不应该担心这个,因为编译器会为我优化这个?
  4. 我最终想要一个v2的std :: shared_ptr,我可以传递给其他函数。

1 个答案:

答案 0 :(得分:6)

由于您声明不需要“复制构造函数的开销”,因此它意味着在创建“动态”向量之后不再需要原始向量。在这种情况下,你可以简单地做

-sOutputFile=./test1output

将使用 move 构造函数构造新的向量。移动矢量的开销几乎不存在。

同样,请记住,在执行此操作后,您的原始std::vector<int>* v2 = new std::vector<int>(std::move(v)); 处于“移出”状态 - 通常情况下,它不再包含原始数据。您可以将v用于其他目的。 v仍然可以破坏,它的破坏对v没有任何影响。