In C++11 or higher, objects can either be copied or moved, which can be used to dictate how your object's resources are managed. The big difference between a copy and a move is simple: a copy creates a copy of the resources an object manages, while a move transfers the resources from one object to another.
In this recipe, we will explain how to make a class movable, including how to properly add move constructors and move assignment operators. We will also explain some of the subtle details of a movable class and how to use them in your code. This recipe is important because, in a lot of cases, moving an object instead of copying an object increases the performance and reduces the memory consumption of your programs. However, the use of movable objects could introduce some instabilities if they are not used properly.