【发布时间】:2017-03-04 05:14:51
【问题描述】:
这里我有一个自动分配的std::vector v。现在有没有办法从v 构造另一个动态分配的std::vector,这样就没有复制构造函数的开销。
std::vector<int> v(3);
std::vector<int>* v2 = new std::vector<int>(v);
-
v的析构函数被调用时会发生什么? - 有人可以详细说明 std::vector 的移动构造函数吗?
- 或者我不应该担心这个,因为编译器会为我优化这个?
我终于想要一个 v2 的 std::shared_ptr ,我可以将它传递给其他函数。
【问题讨论】:
-
为什么需要这样做?如果您需要移动矢量,那么只需
move它即可。 -
不,无法执行。您正试图将
vector从一个内存区域移动到另一个内存区域。但是,您可以使用指针并传递指针。 -
主要问题是,你为什么要首先创建一个动态分配的
std::vector和new? -
@ThomasMatthews 实际上可以 - 通过交换
-
@ThomasMatthews 如果您的意思是交换
std::vector的内部数据的开销,那么我认为您可以正式向 OPs 提问。很明显,OP 担心复制 vector 所拥有的元素的成本。
标签: c++ memory-management vector stl c++14