【发布时间】:2011-11-25 07:27:01
【问题描述】:
c++ 标准库中的许多类现在都有移动构造函数,例如 -
thread::thread(thread&& t)
但似乎 std::mutex 没有。我知道它们不能被复制,但是例如能够从“make_mutex”函数返回一个似乎是有意义的。 (不是说有用,只是觉得有意义)
std::mutex 没有移动构造函数有什么原因吗?
【问题讨论】:
-
我在那里遇到了同样的问题,因为在我的代码中,我需要阻止对一种方法的访问,直到另一种方法完成。可悲的是,运行方法的对象最好在工厂内创建,由于同样的限制,我不能简单地将创建的“仿函数”移出工厂方法。这个帖子真的鼓励我尝试使用
std::future作为分离模型。 -
make_mutex函数的想法仍然有用,抛开所有其他讨论。使用 C++17 并保证复制省略,应该可以这样做。互斥体不会被移动 - 它将在调用者的位置就地构造,但被调用者(例如:make_mutex)可以决定如何进行构造。