In order to understand the move semantics, first and foremost you must understand what a temporary object is. Which is, any object created on the fly and then is immideately discarded:
class A{};
A a; A a1 = A();
So move semantics says Move A() into a1, no copying like having 2 object temprarily occupying memory.
That can work even without the move semantics, given that proper copy constructor and assignmens are implemented. But the move semantics eliminates redundant copies, say if the object is huge in size.