这里有一个自动分配的std::vector v。现在是否有一种方法可以从std::vector构建另一个动态分配的v,这样就没有复制构造函数的开销。
std::vector<int> v(3);
std::vector<int>* v2 = new std::vector<int>(v);v的析构函数被调用时会发生什么?我最后想要一个std::shared_ptr of v2,它可以传递给其他函数。
发布于 2016-10-21 19:43:49
由于您声明不需要“复制构造函数的开销”,这意味着在创建“动态”向量之后不再需要原始向量。在这种情况下,您可以简单地做
std::vector<int>* v2 = new std::vector<int>(std::move(v));它将使用移动构造函数来构造新的向量。移动向量的开销几乎不存在.
同样,请记住,在这样做之后,您的原始v处于“从”状态--通常情况下,它不再包含原始数据。您可以为其他目的重用v。而v仍然是可销毁的,其破坏对v2没有任何影响。
https://stackoverflow.com/questions/40184330
复制相似问题