我有一个有两个字段的类,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参数。
有没有办法避免这种嵌套结构,并保留我前面列出的所有优点?
发布于 2016-05-23 22:41:46
您可以将一个构造函数委托给另一个构造函数:
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
}
};另一种方法是将通用代码放入一个函数中,并从两个构造函数中调用它。
https://stackoverflow.com/questions/37401588
复制相似问题