The problem with move semantics is that people don't understand its fallback mechanism, - (that is if it can't move an object and there is not restriction mechanism in a constructor) - it will be used as a copy constructor which is expensive.
I will advice you to read Nicolai Josuttis' " C++ Move Semantics - The Complete Guide" [1] which describes in great detail all the tips and tricks around move semantics.
P.S.: For any C++ developer out there, in my humble opinion anything written by Nicolai Josuttis is a must-read!