vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建,
move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。
结果:原字符串被转移,变成空字符串。
#include <iostream>
#include <utility>
#include <vector>
#include <string>
int main()
{
std::string str = "Hello";
std::vector<std::string> v;
// 1.调用常规的拷贝构造函数,新建字符数组,拷贝数据
v.push_back(str);
std::cout << "After copy, str is \"" << str << "\"\n";
// 2.调用移动构造函数,掏空str,掏空后,最好不要使用str
v.push_back(move(str));
std::cout << "After move, str is \"" << str << "\"\n";
std::cout << "The contents of the vector are \"" << v[0]
<< "\", \"" << v[1] << "\"\n";
}

本文深入探讨了C++中移动构造函数与拷贝构造函数的区别,通过实例展示了移动构造如何避免数据的重复复制,从而提高效率。特别强调了在std::vector中使用std::move进行元素插入时,原对象状态的变化。
7126





