这里我有一个自动分配的std::vector v
。现在有没有办法从std::vector
构造另一个动态分配的v
,这样就不会有复制构造函数的开销。
std::vector<int> v(3);
std::vector<int>* v2 = new std::vector<int>(v);
v
的破坏者时会发生什么? 我最终想要一个v2
的std :: shared_ptr,我可以传递给其他函数。
答案 0 :(得分:6)
由于您声明不需要“复制构造函数的开销”,因此它意味着在创建“动态”向量之后不再需要原始向量。在这种情况下,你可以简单地做
-sOutputFile=./test1output
将使用 move 构造函数构造新的向量。移动矢量的开销几乎不存在。
同样,请记住,在执行此操作后,您的原始std::vector<int>* v2 = new std::vector<int>(std::move(v));
处于“移出”状态 - 通常情况下,它不再包含原始数据。您可以将v
用于其他目的。 v
仍然可以破坏,它的破坏对v
没有任何影响。