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