【发布时间】:2016-05-23 22:30:56
【问题描述】:
我的课程有几个字段,assignment c-tor 和 move c-tor:
class A{
std::vector<int> numbers;
int k;
public:
A(std::vector<int> &&numbers, const int k):
numbers(numbers), // fast
k(k)
{
// logic
}
A(const std::vector<int> &numbers, const int k):
A(std::move(std::vector<int>(numbers)), k) // copy-and-move vector
{
// empty
}
};
我想将logic 保留在一个c-tor 中并从其他人那里调用它。
另外,我想支持快速move-semantics。而且我必须在assignment c-tor 中明确地copy-and-move 参数。
有什么办法可以避免这种嵌套结构并保留我上面列出的所有优点?
【问题讨论】:
-
你忘了
std::move所以你的构造函数使用&&实际上做了一个副本。您不必显式复制和移动赋值变体,不确定为什么要这样做。 -
@MooingDuck 为什么?
vector有一个move c-tor接受std::vector<T> &&作为参数。为什么要移动已经移动的值? -
@LibertyPaul 它有一个名字,所以它是一个左值:你需要 std::move 在对
std::vector<int>()的调用中将它提升为右值
标签: c++11 constructor move-semantics