Hey guys, there have been questions on how to deal with std::move in the code.
Right now our style guide says nothing about it, but there is no consensus in
the reviews. The problem with std::move is that for all standard library
functions that accept rvalue references as parameters are guaranteed to leave
the moved object in a valid but unspecified state (see
http://en.cppreference.com/w/cpp/utility/move
<http://en.cppreference.com/w/cpp/utility/move>).
The following are some ideas into how to deal with moved objects
1. Treat std::move as a delete and stop using it after the move
std::vector<int> v{1, 2, 3, 4};
..,
foo(std::move(v)); // Don’t use
2. Always create explicitly an scope the object to be moved, with the first
line being the definition of the object to be moved, and the last line of the
scope the move itself.
if (bar()) {
{
std::vector<int> v{1, 2, 3};
….
foo(std::move(v));
}
}
3. Create a scope for the if no scope already exists following the rules of 2):
if (bar()) {
std::vector<int> v{1, 2, 3};
….
foo(std::move(v));
}