关于右值 std::move
今天发现一个情况,对容器map 进行 std::move 之后,原map被清空了。
map<int, int> tmp;
tmp[1] = 1;
tmp[2] = 2;
tmp[3] = 3;
tmp[4] = 4;
tmp[5] = 5;
map<int, int> tmp1;
tmp1[1] = 3;
tmp1[2] = 3;
list<map<int, int>> lmap;
lmap.push_back(std::move(tmp));
lmap.push_back(tmp1);
cout<<" " <<tmp.size()<<" "<<tmp1.size()<<endl; // 0 2
tmp 被清空,内存直接拷贝到了lmap;
这篇文章里介绍的很详细,其中有一段:
注意,标准库对象支持moved from的左值在moved 之后它的对象原值是有效的(可以正常析构),但是是unspecified的,可以理解为空数据,但是这个对象的其他方法返回值不一定是0,比如size().所以,moved from 之后的对象最好还是不要使用吧?(如有不正确理解,请告知)
所以 不要使用。
浙公网安备 33010602011771号