编译器如何实现隐式编译器生成的移动构造函数和移动赋值运算符?
编译器是否使用统一的复制和交换习语operator=
(具有强大的异常安全保证),还是实现了成员明智的移动?
编译器如何实现隐式编译器生成的移动构造函数和移动赋值运算符?
编译器是否使用统一的复制和交换习语operator=
(具有强大的异常安全保证),还是实现了成员明智的移动?
这是一个成员移动,就像隐式定义的复制操作执行成员复制一样。见 12.8 [class.copy] 第 15 和 25 段。
对于不可复制类型或不可交换类型,复制和交换是不可能的,您不希望移动操作依赖于另一个特殊成员或swap
可能不存在或可能无法按要求工作的成员。
编译器是否使用带有统一 operator= 的复制和交换习惯用法(具有强大的异常安全保证),还是实现了成员明智的移动?
根据 C++11 标准的第 12.8/15 段:
非联合类 X 的隐式定义的复制/移动构造函数执行其基类和成员的成员复制/移动。[...]
此外,根据第 12.8/28 段:
非联合类 X 的隐式定义的复制/移动赋值运算符执行其子对象的成员复制/移动赋值。[...]