【问题标题】:Implementation of compiler-generated moves编译器生成动作的实现
【发布时间】:2013-02-17 21:18:06
【问题描述】:

编译器隐式生成的移动构造函数和移动赋值运算符是如何实现的?

编译器是使用带有统一operator= 的复制和交换习惯用法(具有强大的异常安全保证),还是实现了成员明智的移动?

【问题讨论】:

    标签: c++ c++11 move-semantics


    【解决方案1】:

    这是一个成员移动,就像隐式定义的复制操作执行成员复制一样。参见 12.8 [class.copy] 第 15 和 25 段。

    对于不可复制类型或不可交换类型,无法进行复制和交换,您不希望移动操作依赖于可能不存在的另一个特殊成员或 swap 成员或可能无法按要求工作。

    【讨论】:

      【解决方案2】:

      编译器是使用带有统一 operator= 的复制和交换习惯用法(具有强大的异常安全保证),还是实现了成员明智的移动?

      根据 C++11 标准的第 12.8/15 段:

      非联合类 X 的隐式定义的复制/移动构造函数执行其基类和成员的成员复制/移动。 [...]

      此外,根据第 12.8/28 段:

      非联合类 X 的隐式定义的复制/移动赋值运算符执行 按成员复制- /move 分配其子对象。 [...]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-23
        • 1970-01-01
        相关资源
        最近更新 更多