- 将=default用于拷贝控制成员
- 使用=default阻止拷贝类对象
如果我们不希望合成的成员是内联函数应该只对成员的类外定义使用=default,就像对拷贝赋值运算符所作的。
通过将拷贝构造函数和拷贝赋值运算符定义为删除的函数来阻止拷贝。删除的函数是这样一种函数:我们虽然声明了它们,但不能以任何方式使用它们。在函数的参数列表后面加上=delete来指出我们希望将它定义为删除的。
析构函数不能是删除的成员。 - 用移动类对象代替拷贝类对象
移动构造函数通常是将资源从给定对象“移动”而不是拷贝到正在创建的对象。
std::move定义在utility头文件中。当使用move时,直接调用std::move而不是move. - 右值引用
所谓右值引用就是必须绑定到右值的引用。通过&&而不是&来获得右值引用。右值引用有一个重要的性质——只能绑定到一个将要销毁的对象。因此我们可以自由地将一个右值引用的资源“移动”到另一个对象中。一个左值表达式表示的是一个对象的身份,而一个右值表达式表示的是对象的值。一个右值引用不过是某个对象的另一个名字。对于常规引用是左值引用,不能将其绑定到要求转换的表达式、字面常量或是返回右值的表达式。右值引用有着完全相反的绑定特性:可以将一个右值引用绑定到这类表达式上,但不能将一个右值引用直接绑定到一个左值上。
返回非引用类型的函数,连同算术、关系、位以及后置递增/递减运算符&
C++11新特性(三)
最新推荐文章于 2024-10-06 10:17:48 发布
本文介绍了C++11中的移动语义和右值引用,包括如何使用`=default`处理拷贝控制成员,如何阻止拷贝,移动构造函数和移动赋值运算符的作用,以及右值引用的特性和std::move的使用。此外,还讨论了移动迭代器、引用限定成员函数、function类模板、显式类型转换运算符、虚函数的`override`和`final`指示符,以及继承的构造函数等新特性。
摘要由CSDN通过智能技术生成