std::move

<utility>

将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。

C++ 标准库使用比如vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建, 本来原意是想把参数push_back进去就行了,通过std::move,可以避免不必要的拷贝操作。

std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝所以可以提高利用效率,改善性能.。

对指针类型的标准库对象并不需要这么做。

 1 #include <utility>
 2 #include <string>
 3 using namespace std;
 4 int main(){
 5     string str="hello";
 6     vector<string> v;
 7     v.push_back(str);//实际上会调用常规拷贝构造函数,拷贝数据,新建一个str
 8     
 9     v.push_back(move(str));//直接调用移动构造函数,掏空str,之后str内容就空了,别再使用str
10 }

 

posted @ 2019-07-25 16:47  Austin_anheqiao  阅读(510)  评论(0编辑  收藏  举报