C++ Move Semantics – What is Default Move Construct?

c++c++11move-semantics

What is the definition of the default move constructor? I can't think of anything sensible. Maybe a swap on ptr members and copy on values/reference member?

Best Answer

That's what the standard says (12.8/15):

The implicitly-defined copy/move constructor for a non-union class X performs a memberwise copy/move of its bases and members. [ Note: brace-or-equal-initializers of non-static data members are ignored. See also the example in 12.6.2. β€”end note ] The order of initialization is the same as the order of initialization of bases and members in a user-defined constructor (see 12.6.2). Let x be either the parameter of the constructor or, for the move constructor, an xvalue referring to the parameter. Each base or non-static data member is copied/moved in the manner appropriate to its type:

β€” if the member is an array, each element is direct-initialized with the corresponding subobject of x;

β€” if a member m has rvalue reference type T&&, it is direct-initialized with static_cast<T&&>(x.m);

β€” otherwise, the base or member is direct-initialized with the corresponding base or member of x.

Virtual base class subobjects shall be initialized only once by the implicitly-defined copy/move constructor (see 12.6.2).

For pointers and fundamental types moving is the same as copying.

Related Question