1

默认移动构造函数的定义是什么?我想不出什么明智的。也许交换 ptr 成员并复制值/引用成员?

4

2 回答 2

2

这就是标准所说的(12.8/15):

非联合类 X 的隐式定义的复制/移动构造函数执行其基类和成员的成员复制/移动。[注意:非静态数据成员的大括号或等号初始化器被忽略。另见 12.6.2 中的示例。—尾注] 初始化的顺序与用户定义的构造函数中基和成员的初始化顺序相同(见 12.6.2)。让x是构造函数的参数,或者对于移动构造函数,是引用参数的 xvalue。每个基本或非静态数据成员都以适合其类型的方式复制/移动:

— 如果成员是一个数组,则每个元素都直接使用 的相应子对象进行初始化x

— 如果一个成员m有右值引用类型T&&,它直接用static_cast<T&&>(x.m);初始化

— 否则,基数或成员直接用 的相应基数或成员初始化x

虚拟基类子对象只能由隐式定义的复制/移动构造函数初始化一次(见 12.6.2)。

对于指针和基本类型,移动与复制相同。

于 2013-09-11T12:12:21.163 回答
1

使用为每个成员类型定义的移动语义,非联合成员按其初始化顺序移动。

http://en.cppreference.com/w/cpp/language/move_constructor

于 2013-09-11T05:40:16.213 回答