compiler为什么不能向程序员隐藏这个功能,由compiler自己选择什么情况下move?
直接拿我们程序中的代码举例吧,有一段代码,作用是把数据库表保存到XML文件。这个转换的过程,有个中间容器,大概是这样:
std::map> mapTable;
可以理解为map的key是数据表的列名,std::vector
在我之前,这个容器是这么填充的
- std::vector
vecRow; - for(){
- vecRow.push_back(...);
- }
- mapTable["列名1"] = vecRow;
mapTable["列名1"]= vecRow; 这一下,把所有列数据复制一遍,存到mapTable里。然后到后面vecRow不需要了,出作用域就被自动释放了。其实,代码的意思就是把vecRow里的数据放进mapTable,但是用上面的方法,白白的重新创建了一遍所有行数据,又把不再需要的vecRow释放掉了。
那有没有一种办法,直接就让列数据push进mapTable里呢?在std::move之前,还是有办法的,创建vecRow 的时候就让它是mapTable里某列的引用
std::vector