其他分享
首页 > 其他分享> > 第十三章 拷贝控制

第十三章 拷贝控制

作者:互联网

转载自https://github.com/applenob/Cpp_Primer_Practice,看C++primer的时用的笔记。自己做了一些补充,感谢前人的总结!
这章比较难,初学C++的可以结合《Essential C++》的第五章学习。回过头来再看这一章会轻松一点。

拷贝控制操作(copy control):

拷贝、赋值和销毁

拷贝构造函数

拷贝赋值运算符

析构函数

三/五法则

使用=default

阻止拷贝

拷贝控制和资源管理

交换操作

对象移动

右值引用

move函数

移动构造函数和移动赋值运算符

合成的移动操作:

只有当一个类没有定义任何自己版本的拷贝控制成员,且类的每个非static数据成员都可以移动时,编译器才会为它合成移动构造函数或移动赋值运算符。如string中有移动操作,就可以生成合成的移动操作。

如果显示的要求编译器生成=default的移动操作,且编译器不能移动所有成员时,编译器会将移动操作定义为删除的函数。

一个类是否定义了自己的移动操作对拷贝操作如何合成有影响。如果类定义了一个移动构造函数和/或一个移动赋值运算符,则该类的合成拷贝构造函数和拷贝赋值运算符会被定义为删除的。

右值引用和成员函数

Foo& operator=(const Foo&) &;//防止对右值赋值

引用限定符可以是&和&&,对于&限定的函数,我们只能将它用于左值;对于&&限定的函数,只能用于右值:

Foo &retFoo();//返回一个引用;retFoo调用是一个左值
Foo retVal();//返回一个值,retval调用是一个右值
Foo j;

retFoo()=j; //正确,retfoo返回一个左值
retVal()=j; //错误,retval()返回一个右值
j=retval(); //正确,我们可以将一个右值作为赋值操作的右侧运算对象

一个函数可以同时用const和引用限定,引用限定符&必须跟随在const限定符后。

当定义const成员函数时,可以定义两个版本,唯一的差别是一个版本有const限定而另一个没有。引用限定的函数不同。如果定义两个或两个以上相同名字和相同参数列表的成员函数,就必须对所有函数都加上引用限定符,或者都不加。

标签:控制,构造函数,函数,运算符,第十三章,拷贝,移动,赋值
来源: https://www.cnblogs.com/woden3702/p/16278661.html