如何正确运用C++中的std::move()函数?
- 内容介绍
- 文章标签
- 相关推荐
本文共计450个文字,预计阅读时间需要2分钟。
std::move 函数可以将左值引用转换为右值引用。它以一个非常简单的方式将左值转换为右值引用,从而避免了不必要的复制操作。
通过使用 std::move,可以减少不必要的拷贝,提高性能。std::move 是为了性能而生的。
std::move 实际上是将对象的状态或所有权转移到右值引用,而不是创建一个对象的副本。
std::move函数可以以非常简单的方式将左值引用转换为右值引用。
通过std::move,可以避免不必要的拷贝操作。std::move是为性能而生。
std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。
如string类在赋值或者拷贝构造函数中会声明char数组来存放数据,然后把原string中的 char 数组被析构函数释放,如果str是一个临时变量,则上面的拷贝,析构就是多余的,完全可以把临时变量str中的数据直接 “转移” 到新的变量下面即可。
#include <iostream>#include <utility>
#include <vector>
#include <string>
int main()
{
std::string str = "Hello";
std::vector<std::string> v;
//调用常规的拷贝构造函数,新建字符数组,拷贝数据
v.push_back(str);
std::cout << "After copy, str is \"" << str << "\"\n";
//调用移动构造函数,掏空str,掏空后,最好不要使用str
v.push_back(std::move(str));
std::cout << "After move, str is \"" << str << "\"\n";
std::cout << "The contents of the vector are \"" << v[0]
<< "\", \"" << v[1] << "\"\n";
getchar();
return 0;
}
输出:
After copy, str is "Hello"After move, str is ""
The contents of the vector are "Hello", "Hello"
结论: 明显看出,在move之前str是有值的,在move之后,str里的值为空了!
本文共计450个文字,预计阅读时间需要2分钟。
std::move 函数可以将左值引用转换为右值引用。它以一个非常简单的方式将左值转换为右值引用,从而避免了不必要的复制操作。
通过使用 std::move,可以减少不必要的拷贝,提高性能。std::move 是为了性能而生的。
std::move 实际上是将对象的状态或所有权转移到右值引用,而不是创建一个对象的副本。
std::move函数可以以非常简单的方式将左值引用转换为右值引用。
通过std::move,可以避免不必要的拷贝操作。std::move是为性能而生。
std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。
如string类在赋值或者拷贝构造函数中会声明char数组来存放数据,然后把原string中的 char 数组被析构函数释放,如果str是一个临时变量,则上面的拷贝,析构就是多余的,完全可以把临时变量str中的数据直接 “转移” 到新的变量下面即可。
#include <iostream>#include <utility>
#include <vector>
#include <string>
int main()
{
std::string str = "Hello";
std::vector<std::string> v;
//调用常规的拷贝构造函数,新建字符数组,拷贝数据
v.push_back(str);
std::cout << "After copy, str is \"" << str << "\"\n";
//调用移动构造函数,掏空str,掏空后,最好不要使用str
v.push_back(std::move(str));
std::cout << "After move, str is \"" << str << "\"\n";
std::cout << "The contents of the vector are \"" << v[0]
<< "\", \"" << v[1] << "\"\n";
getchar();
return 0;
}
输出:
After copy, str is "Hello"After move, str is ""
The contents of the vector are "Hello", "Hello"
结论: 明显看出,在move之前str是有值的,在move之后,str里的值为空了!

