【发布时间】:2014-12-18 23:08:29
【问题描述】:
我想移动一个std::map 容器对象到另一个。最简单的形式:
#include<map>
#include<thread>
#include<vector>
using namespace std;
int main ()
{
map<void*, vector<thread>> m1, m2;
// m1 is updated
m1.insert(m2.begin(), m2.end()); // <--- problem here
m2.clear(); // not required anymore
}
但是它给出了error的页面:
error: use of deleted function ‘std::thread::thread(const std::thread&)’
如何做到这一点?
【问题讨论】:
-
嗯,你不能复制线程。我唯一的建议是
map<void*, vector<shared_ptr<thread>>>(或map<void*, shared_ptr<vector<thread>>>,以更合适的为准)。 -
你所要求的并不真正有意义——复制一个线程是什么意思?你想移动它吗?
-
@Cameron,是的,实际上它是移动的。之后我会运行
m2.clear()。 -
@iammilind:更好的是,在这种情况下,您可以一次简单地移动整个地图:
m1 = std::move(m2);(之后m2将处于有效但未指定的状态 - 如果您想要将其重新用于其他用途,只需先将其清除即可。) -
@iammilind:啊,然后选择
std::make_move_iterator答案之一(然后是m2.clear()以摆脱空对象外壳),这会将项目适当地移动到m1.
标签: c++ c++11 stl compiler-errors rvalue