В книге "С++ Concurrency в действии", читающей следующий метод
std::unique_lock<std::mutex> wait_for_data()
{
std::unique_lock<std::mutex> head_lock(head_mutex);
data_cond.wait(head_lock,[&]{return head.get()!=get_tail();});
return std::move(head_lock);
}
Я не могу понять, почему head_lock является std:: move-ed при возврате. Мое понятие и ощущение кишки использования перемещения и RVO соответствуют мнению, разделяемому в С++ 11 rvalues и перемещению семантики (return statement)
Но я, как правило, доверяю автору знать лучше. Может ли кто-нибудь уточнить, когда std:: переместить возвращаемое значение лучше, и есть ли что-то конкретное о замках? Спасибо.