执行编译器生成的移动

时间:2013-03-03 20:30:08

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

  

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

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

  

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

此外,根据第12.8 / 28段:

  

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