小编Joh*_*dge的帖子

为什么std :: move on std :: unique_lock没有任何影响?

我有以下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.

我错过了什么?

c++ mutex move-semantics c++11

7
推荐指数
1
解决办法
794
查看次数

标签 统计

c++ ×1

c++11 ×1

move-semantics ×1

mutex ×1