在这种情况下正确使用移动语义?

肖克瓦夫

抱歉,标题有点含糊;我将通过一些示例来阐明它。假设我有一个Foo类,其中包含一个init方法:

class Foo{
    auto init(const BigMemoryHungryType& t) -> void {
        //do a ton of stuff
    }
};

现在假设我想创建此init方法的重载,这次接受一个BigMemoryHungryType类型的右值,以便我可以简单地执行move语义:

class Foo{
    auto init(const BigMemoryHungryType& t) -> void {
        //do a ton of stuff
    }

    auto init(BigMemoryHungryType&& t) -> void {
        //exact same as other init, but utilizing move semantics
    }

};

我如何在这里将复制粘贴降至最低?我正在考虑的方法涉及在两个init方法中分配所有成员,然后调用受保护/私有init方法来完成实际工作:

class Foo{
    auto init(const BigMemoryHungryType& t) -> void {
        real_t = t;
        init();
    }

    auto init(BigMemoryHungryType&& t) -> void {
        real_t = std::move(t);
        init();
    }

private:
    auto init() -> void {
        //do actual work
    }

    BigMemoryHungryType real_t;
};

看起来一切正常,但是如果init()引发异常,则会违反强异常保证。我在这里错过明显的东西吗?

陈柏霖

尝试这个

auto init(BigMemoryHungryType t) -> void {
   init(std::move(t));
}

它将复制BigMemoryHungryType一次到临时文件,并将其移到移动重载中的实例字段

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在这种情况下正确使用移动语义?

来自分类Dev

在这种情况下使用枚举是否正确?

来自分类Dev

在这种情况下,如何正确使用ndb KeyProperty?

来自分类Dev

在这种情况下如何正确使用struct

来自分类Dev

如何正确使用泛型在这种情况下?

来自分类Dev

在这种情况下如何正确使用自动版式?

来自分类Dev

在这种情况下如何正确使用qmake?

来自分类Dev

jQuery:在这种情况下,.on()的正确用法是什么?

来自分类Dev

jQuery:在这种情况下,.on()的正确用法是什么?

来自分类Dev

在这种情况下如何正确显示

来自分类Dev

在这种情况下如何正确查询?

来自分类Dev

在这种情况下合并是否正确?

来自分类Dev

使用R,在这种情况下如何正确使用str_extract?

来自分类Dev

不知道在这种情况下如何正确使用Matrix4.LookAt

来自分类Dev

在这种情况下,如何正确使用SQL COUNT()函数?

来自分类Dev

Angular:在这种特殊情况下使用ng-change的正确方法是什么?

来自分类Dev

在这种情况下,重载使用不正确吗?

来自分类Dev

我如何使用“平等”?在这种情况下正确吗?

来自分类Dev

在这种情况下如何使用unique_ptr?

来自分类Dev

在这种情况下,如何避免使用instanceof?

来自分类Dev

在这种情况下如何使用struct

来自分类Dev

在这种情况下如何使用功能?

来自分类Dev

在这种情况下如何使用智能指针

来自分类Dev

在这种情况下如何使用模拟?

来自分类Dev

在这种情况下可以使用复制吗?

来自分类Dev

如何使用lastInsertId在这种情况下?

来自分类Dev

为什么在这种情况下使用memset

来自分类Dev

在这种情况下避免使用await

来自分类Dev

在这种情况下如何使用案例-CakePhp 3

Related 相关文章

  1. 1

    在这种情况下正确使用移动语义?

  2. 2

    在这种情况下使用枚举是否正确?

  3. 3

    在这种情况下,如何正确使用ndb KeyProperty?

  4. 4

    在这种情况下如何正确使用struct

  5. 5

    如何正确使用泛型在这种情况下?

  6. 6

    在这种情况下如何正确使用自动版式?

  7. 7

    在这种情况下如何正确使用qmake?

  8. 8

    jQuery:在这种情况下,.on()的正确用法是什么?

  9. 9

    jQuery:在这种情况下,.on()的正确用法是什么?

  10. 10

    在这种情况下如何正确显示

  11. 11

    在这种情况下如何正确查询?

  12. 12

    在这种情况下合并是否正确?

  13. 13

    使用R,在这种情况下如何正确使用str_extract?

  14. 14

    不知道在这种情况下如何正确使用Matrix4.LookAt

  15. 15

    在这种情况下,如何正确使用SQL COUNT()函数?

  16. 16

    Angular:在这种特殊情况下使用ng-change的正确方法是什么?

  17. 17

    在这种情况下,重载使用不正确吗?

  18. 18

    我如何使用“平等”?在这种情况下正确吗?

  19. 19

    在这种情况下如何使用unique_ptr?

  20. 20

    在这种情况下,如何避免使用instanceof?

  21. 21

    在这种情况下如何使用struct

  22. 22

    在这种情况下如何使用功能?

  23. 23

    在这种情况下如何使用智能指针

  24. 24

    在这种情况下如何使用模拟?

  25. 25

    在这种情况下可以使用复制吗?

  26. 26

    如何使用lastInsertId在这种情况下?

  27. 27

    为什么在这种情况下使用memset

  28. 28

    在这种情况下避免使用await

  29. 29

    在这种情况下如何使用案例-CakePhp 3

热门标签

归档