4

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

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

4

2 回答 2

4

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

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

于 2013-03-03T20:32:45.043 回答
2

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

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

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

此外,根据第 12.8/28 段:

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

于 2013-03-03T20:42:51.733 回答