The idea of the move constructor is that you are permitted (but not obliged) to leave the source object in an unusable state.
If you copy an object, there is an expectation that the source object doesn't change . You could, of course, write a copy constructor that trashes the source object; you'd be very unpopular, because everyone expects that a copy constructor doesn't change the source object.
With a move operator, everyone knows that the source object is allowed to be left in an unusable state, and will expect that if leaving it in an unusable state makes the move faster, it will be.
That's all it means. It's a way of communicating to the programmer; use copy if the source should still be usable afterwards, use move if you're never going to use the source object again and you don't care if it's left in an unusable state.
Can anyone explain why I still can access what I need from this rvalue reference even when it was moved to initialize base class? |
Sorry, what is it that you're accessing that you need to? Which line of code is doing something you don't expect?