Explain this C++ shills

So when is it a good idea to use it according to you?

When you want to something to invoke move semantics.

So you rather manually invoke a move instead of relying on the compiler maybe doing RVO?

Compilers are not magic user. Most of the time manually moving is not worth it though.