我的课程包含几个字段,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
。我必须在copy-and-move
中明确assignment c-tor
个参数。
有没有办法避免这种嵌套构造并保留上面列出的所有优势?
答案 0 :(得分:2)
您可以将一个构造函数委托给另一个:
struct A
{
A(const std::vector<int> & v) : A(std::vector<int>(v)) {}
A(std::vector<int> && v)
: v_(std::move(v))
{
// logic
}
// ...
};
现在移动构造函数尽可能快,并且复制构造函数比将两个构造函数拼出时要多花费一倍。但是,如果您愿意支付额外费用,那么您可能只需要一个构造函数:
struct A
{
A(std::vector<int> v)
: v_(std::move(v))
{
// logic
}
};
另一种方法是将公共代码放入一个函数中并从两个构造函数中调用它。