c++ 新特性 右值引用

<1>普通左右值引用ide

int a = 0;函数

int&ref1 = a; //左值引用spa

int&&ref2 = a; //右值引用对象

<2>右值和左值引用基本没什么区别,差异是右值引用能够绑定到一个临时对象(右值)上,如:内存

int&x = int();//编译错误it

Int&&y = int();编译

<3>经过右值引用,程序能够明确的区分出传入的参数是否为右值,从而避免了没必要要的拷贝,程序的效率也就获得了提升class

(1)普通交换数据:效率

template<class T> void swap(T& a, T& b)变量

{

T temp(a);//temp对象建立后有a的两份拷贝

a = b;//b的值也有两份,a一份

b = temp;//a如今也有两份拷贝,b有一份

}

在对象比较大时,比较影响效率

(2)右值应用:

template<class T> T&& move(T&& x)

{

return x;

}

//这一过程不会产生拷贝操做

template<class T> void swap(T& a, T& b)

{

T temp(move(a));//对象a被移到temp中,a被清空

a = move(b);//对象b被移到a中,b被清空

b = move(temp);//对象temp被移到b中,temp被清空

}

<4>不要返回函数内部new分配的内存的引用虽然不存在局部变量的被动销毁问题又面临其它尴尬局面函数返回的引用只是做为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就没法释放,形成memory leak

相关文章
相关标签/搜索