move语义+右值引用+完美转发

move语义+右值引用+完美转发

1.Move语义

move语义代表所有符合这种意思的行为:将一个对象的所有权转交给另一个对象,源对象失去所有权。

例如:

int a = 10;
int *p = &a;
int *q;

q = p;
p = nullptr; //所有权必须转交完全

2.右值引用

一般move语义用于赋值运算符的重载上,其它函数很少能用到move语义。

为了更好的实现move语义,C++对函数参数进行判断,如果是右值引用,则应该为move语义,应该调用移动构造函数。否则是左值引用,推断为复制语义,应该调用拷贝构造函数。

移动构造函数和拷贝构造函数的区别就在于函数参数是左值引用还是右值引用。