Ans*_*man 1 c++ memory-management stl vector c++14
在这里我有一个自动分配std::vector v.现在有没有办法构造另一个动态分配std::vector ,v从而没有复制构造函数的开销.
std::vector<int> v(3);
std::vector<int>* v2 = new std::vector<int>(v);
Run Code Online (Sandbox Code Playgroud)
v被召唤时会发生什么?我终于想要一个std :: shared_ptr v2,我可以将其传递给其他函数.
由于您声明不需要"复制构造函数的开销",因此它意味着在创建"动态"向量之后不再需要原始向量.在这种情况下,你可以做到
std::vector<int>* v2 = new std::vector<int>(std::move(v));
Run Code Online (Sandbox Code Playgroud)
这将使用移动构造函数来构造新的向量.移动矢量的开销几乎不存在.
同样,请记住,在执行此操作后,您的原始文件v处于"移出"状态 - 通常情况下,它不再包含原始数据.您可以将其重用v用于其他目的.并且v仍然是可以破坏的,它的破坏将不起作用v2.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |