+1 for 1. “treat it like a deleted pointer”
> On Jun 12, 2015, at 4:21 PM, Alexander Rojas <[email protected]> wrote: > > 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)); > } >
