std::mutex 需要一个可调整大小的容器

Need a resizeable container for std::mutex

我需要能够在任何给定时间存储 "n" 个互斥量。

这些网址与我的问题直接相关 How can I use something like std::vector<std::mutex>?

而且我相信我理解为什么不能将互斥量存储在可能必须移动它们的容器中(因为互斥量不能移动)。我的问题是,自发布这些文章以来,c/c++ 是否有任何我可能可以利用的我不知道的进展?

一个简单的数组会很好,但由于显而易见的原因行不通。 vector 或类似的东西可以工作,除了不能移动互斥量并因此产生编译器错误的事实。以下内容确实有效,但似乎遭到某些人的谴责。为什么不应该使用以下代码示例来解决问题是否有编程原因?

std::vector<std::timed_mutex*> myMutexes;
myMutexes.push_back(new std::timed_mutex());

来自链接页面,

If you need to add non-movable items to the end of a sequence, switch to deque, that will work where vector won't.

如果您需要既不在开头也不在结尾的插入或删除,那么 std::deque 当然也不起作用,您需要使用 std::vector<std::unique_ptr<std::mutex>> 之类的东西。这比使用原始指针要好,因为它保证互斥量在从向量中删除或向量超出范围时被释放(程序异常终止的情况除外)。