0
Object usage post move
I thought that once we use move on object , we should not use the object. Is this correct or am I mistaken? Refer code below : Why Ketan is printed by display method called from main function? Isn't it display empty string as object is moved ? https://code.sololearn.com/cIW2yj9sbdnU/?ref=app
2 Answers
+ 3
That entirely depends on how the move constructor and assignment operator are implemented.
All C++ library objects leave their moved from objects in a valid but possibly inconsistent state.
For example the vector move constructor states that it leaves the moved from object in an empty() state. Calling clear() would be fine. pop_back() might not be a good idea.
Right now you are not moving anything.
All std::move does is cast the type into type&& so that the correct function is selected by the compiler.
Even if you did move, your move constructor/assignment op assign the old string an empty string which is a perfectly valid string state to keep working with.
If for example you had a pointer in your class that always points to a valid resource, but implemented your move constructor to make it point to a nullptr instead, then it would not be a good idea to reuse that object as the functions would cause a crash.
This would also mean that the object is now in an invalid state.
0
Thanks Dennis
It is much more clear to me now..
I updated code and now understand that move constructor is called either we construct object from temp obj or moving already created obj by move...
What I was trying was something different to call rvalue ref method
Is my understanding correct now?
I also got most of the point from your response except one.
Could you please elaborate more on paragraph related to vector example ?