首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将自动分配的std::向量转换为动态分配的std::向量,而不需要复制开销

将自动分配的std::向量转换为动态分配的std::向量,而不需要复制开销
EN

Stack Overflow用户
提问于 2016-10-21 19:40:46
回答 1查看 81关注 0票数 1

这里有一个自动分配的std::vector v。现在是否有一种方法可以从std::vector构建另一个动态分配的v,这样就没有复制构造函数的开销。

代码语言:javascript
运行
复制
std::vector<int> v(3);
std::vector<int>* v2 = new std::vector<int>(v);
  1. v的析构函数被调用时会发生什么?
  2. 有人会在移动中错误地删除std::vector的构造函数吗?
  3. 或者我不应该担心这一点,因为编译器会为我优化这一点吗?

我最后想要一个std::shared_ptr of v2,它可以传递给其他函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-21 19:43:49

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

代码语言:javascript
运行
复制
std::vector<int>* v2 = new std::vector<int>(std::move(v));

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

同样,请记住,在这样做之后,您的原始v处于“从”状态--通常情况下,它不再包含原始数据。您可以为其他目的重用v。而v仍然是可销毁的,其破坏对v2没有任何影响。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40184330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档