首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++如何避免移动构造函数的模糊

C++如何避免移动构造函数的模糊
EN

Stack Overflow用户
提问于 2016-05-23 22:30:56
回答 1查看 808关注 0票数 1

我有一个有两个字段的类,assignment c-tormove c-tor

代码语言:javascript
复制
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参数。

有没有办法避免这种嵌套结构,并保留我前面列出的所有优点?

EN

回答 1

Stack Overflow用户

发布于 2016-05-23 22:41:46

您可以将一个构造函数委托给另一个构造函数:

代码语言:javascript
复制
struct A
{
    A(const std::vector<int> & v) : A(std::vector<int>(v)) {}

    A(std::vector<int> && v)
    : v_(std::move(v))
    {
        // logic
    }

    // ...
};

移动构造函数现在尽可能快,并且复制构造函数的开销比将两个构造函数拼出要多一次。但是,如果您愿意支付额外的费用,您最好只有一个构造函数:

代码语言:javascript
复制
struct A
{
    A(std::vector<int> v)
    : v_(std::move(v))
    {
        // logic
    }
};

另一种方法是将通用代码放入一个函数中,并从两个构造函数中调用它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37401588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档