首页 > TAG信息列表 > StrVec
对象移动
对象移动是相对于对象拷贝的,在一些场景(比如:把对象作为一个参数传递)移动会比拷贝提升性能。还有一个原因是有些对象禁止拷贝:例如IO类和unique_ptr。 被移动的对象必须是右值,如果不是可以用std::move()显式转换为右值,但转换之后不能对这个对象的值做任何假设,最好手动清空。 对移动操C++ primer 第五版13.39代码
class StrVec{ public: StrVec(); // 构造函数 StrVec(const StrVec&); // 拷贝构造 StrVec &operator=(const StrVec&); // 拷贝赋值构造 ~StrVec(); // 析构函数 void pushBack(const交换操作
通常定义交换,需要一次拷贝和两次赋值: Hasptr temp = v1; //创建v1的一个临时副本 v1 = v2; //将v2赋值给v1 v2 =temp; //将保存v1的值赋予v2 拷贝一个类值的 Hasptr 会分配一个新的 string 并将其拷贝到 Hasptr 指向的位置,但是更希望 swap 是交换指针,而不是分配C++:移动构造函数和移动赋值运算符
与拷贝构造函数不同,移动构造函数不分配任何新内存;它接管给定的StrVec中的内存。在接管内存之后,它将给定对象中的指针都置为nullptr。这样就完成了从给的对象的移动操作,此对象将继续存在。最终,移后源对象会被销毁。 //移动构造函数 StrVec::StrVec(StrVec &&s) noexcept:element