【发布时间】:2020-12-14 06:23:08
【问题描述】:
如何将向量转换/复制到 unique_ptr
这就是我想要实现的(向量来源于另一个上下文,复制到unique_ptr后会被删除。unique_ptr是固定长度的,因此可以更有效地分配)。
std::vector<int> vv {1, 2, 3};
struct
U {
U(std::vector<int> v) { // copy constructor
// copy vector v to unique_ptr u, HOW?
}
std::unique_ptr<int[]> u;
};
U uu {vv}; // copy vector vv to unique_ptr uu, HOW?
我试图创建一个复制构造函数
U(std::vector<int> v) {
u = std::make_unique<int[]>(v.size()); // OK
std::copy(v.begin(), v.end(), u); // error: u has no copy constructor
}
那么,我应该如何构造复制构造函数?
事实上,一旦构造完成,我希望 unique_ptr
std::unique_ptr<int const[]> const u; // const in both length and content
复制构造函数在这两种情况下的外观如何?
案例 1) std::unique_ptr
【问题讨论】:
-
出于性能原因,向量不是最优的我不明白这怎么可能。数组和向量具有相同的性能特征。
-
出于性能原因,向量不是最优的
std::vector和std::unique_ptr之间的性能没有差异。使用矢量,它是工作的工具。 -
即使存在差异,您也需要很多差异来证明复制整个向量的合理性
-
您确实应该解释您的性能问题。肯定可以回答你的问题。但是您似乎对为什么使用
vector与unique_ptr相比会出现性能问题存在误解,所以首先应该澄清这一点。 -
unique_ptr 是固定长度的,因此可以更有效地分配向量可以使用
reserve,这将同样有效地分配。
标签: c++ vector containers unique-ptr