默认移动构造函数的定义是什么?我无法想到任何明智的事情。也许交换ptr成员并复制值/引用成员?
答案 0 :(得分:2)
这就是标准所说的(12.8 / 15):
非联合类X的隐式定义的复制/移动构造函数执行其基础和成员的成员复制/移动。 [注意:忽略非静态数据成员的大括号或大小写。另请参见12.6.2中的示例。 -end note]初始化顺序与用户定义构造函数中基数和成员的初始化顺序相同(见12.6.2)。设
x
或者是构造函数的参数,或者对于移动构造函数,是引用参数的xvalue。以适合其类型的方式复制/移动每个基本或非静态数据成员:- 如果成员是一个数组,则使用
x
的相应子对象直接初始化每个元素;- 如果成员
m
的右值引用类型为T&&
,则会使用static_cast<T&&>(x.m)
进行直接初始化;- 否则,使用
x
的相应基数或成员对基数或成员进行直接初始化。虚拟基类子对象只能由隐式定义的复制/移动构造函数初始化一次(见12.6.2)。
对于指针和基本类型,移动与复制相同。
答案 1 :(得分:1)
使用为每个成员类型定义的移动语义,以非初始化顺序移动非联合成员。