<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 }