我有以下C++(11)代码:
#include <mutex>
void unlock(std::unique_lock<std::mutex> && ulock)
{
}
int main(void)
{
std::mutex m;
std::unique_lock<std::mutex> ulock(m);
unlock(std::move(ulock));
if (ulock.mutex() == &m || ulock.owns_lock())
{
throw std::runtime_error("");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么在返回之后仍然保留互斥锁unlock().我的期望是,在std::move()从调用返回时导致锁超出范围(并被析构函数解锁)unlock().至少,似乎std::move()应该导致ulock从互斥锁变为"未绑定" m.
我错过了什么?