什么是默认移动构造?

时间:2013-09-11 05:22:45

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

默认移动构造函数的定义是什么?我无法想到任何明智的事情。也许交换ptr成员并复制值/引用成员?

2 个答案:

答案 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)

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

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