为什么condition_variable
不是MoveConstructible(按照http://en.cppreference.com/w/cpp/thread/condition_variable)?这禁止包含在大量移动东西的容器中(例如std::unordered_map
)。为什么一个condition_variable不是MoveAssignable
这迫使人们使用一个unique_ptr
这引起了一个额外的堆分配,其中像make_shared
这样的东西是建立来解决。此外,如果没有池分配器,这可能变得非常低效。
可能让线程安全太麻烦。您不希望在移动变量期间发生通知。 – NathanOliver
@NathanOliver反正'condition_variable'线程的接口中的所有函数都不安全吗?我只是想着为什么这应该是一个问题 – Curious
我认为这只是没有任何意义。考虑一个条件变量处于等待状态并且另一个线程复制它的情况。复制的条件变量的状态应该是什么?如果你说它应该像它的默认构建状态那么再次复制真的没有意义。此外,它取决于是否允许在不调用UB的情况下复制本地条件变量结构(用于'std :: condition_variable')是否允许复制'pthread_cond_t'。 – Arunmu