移动赋值运算符(c++11)

时间:2021-12-10 06:19:33

1.概念

1)移动赋值运算符是一个重载的赋值运算符,参数为自身类的右值引用,返回值自身类的左值引用,由于不抛出任何异常,用noexcept指定(如果定义在类的外面,那么定义也要用noexcept指定)

移动赋值运算符(c++11)

移动赋值运算符(c++11)

移动赋值运算符(c++11)

2.合成移动赋值运算符

  同移动构造函数

3.具有拷贝赋值和移动赋值两种功能的赋值运算符

移动赋值运算符(c++11)

移动赋值运算符(c++11)

  此赋值运算符有一个非引用形参,这就意味为使用它时会发生拷贝初始化,遇到左值则使用拷贝构造函数,遇到右值则使用移动构造函数。

移动赋值运算符(c++11)

  第一个赋值中:hp2是一个左值,所以会使用拷贝构造函数来生成临时对象rhs;

  第二个赋值中:move函数创建了一个右值,所以会使用移动构造函数来生成临时对象rhs,hp2被move调用后就不能再使用了。