What is std::move(), and when should it be used?

Basilevs picture Basilevs · Aug 5, 2010 · Viewed 303.5k times · Source
  1. What is it?
  2. What does it do?
  3. When should it be used?

Good links are appreciated.

Answer

Scharron picture Scharron · Aug 5, 2010

Wikipedia Page on C++11 R-value references and move constructors

  1. In C++11, in addition to copy constructors, objects can have move constructors.
    (And in addition to copy assignment operators, they have move assignment operators.)
  2. The move constructor is used instead of the copy constructor, if the object has type "rvalue-reference" (Type &&).
  3. std::move() is a cast that produces an rvalue-reference to an object, to enable moving from it.

It's a new C++ way to avoid copies. For example, using a move constructor, a std::vector could just copy its internal pointer to data to the new object, leaving the moved object in an moved from state, therefore not copying all the data. This would be C++-valid.

Try googling for move semantics, rvalue, perfect forwarding.