2013-03-03 62 views
4

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

编译器是否使用带有统一operator=(具有强大的异常安全保证)的复制和交换方式,或者是否实现了成员方式的移动?

回答

2

编译器是否使用带有统一运算符=(具有强大的异常安全保证)的复制和交换方式,或者它是否实现了成员方式的移动?

每个段落的C++ 11标准的12.8/15:

用于非联合类X中的隐式定义的复制/移动的构造进行其碱基的成员复制/移动和成员。 [...]

此外,每段12.8/28:

用于非联合类X中的隐式定义的复制/移动分配操作者执行成员逐一禁止复制 /移动分配其子对象。 [...]

4

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

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