C++ primer阅读之拷贝控制

第十三章 拷贝控制

1. 拷贝构造函数第一个参数必须是自身类类型的引用。否则不会成功。

2.注意直接初始化和拷贝初始化的区别。

3.赋值运算符,以=为例:Foo& operator=(const Foo&);通常返回一个指向其左侧运算对象的引用。

4.拷贝构造和拷贝赋值区别:前者产生新对象,后者是在已有对象上赋值。

5.析构函数释放对象使用的资源,并销毁对象的非static数据成员。无返回值和参数。不可被重载。

6.需要析构函数的类也需要拷贝和赋值操作。合成析构函数不会delete一个指针数据成员。用合成构造和赋值操作可能会delete一个指针两次。

7.拷贝构造和赋值操作几乎是在一起的,但不一定需要析构函数。

8.使用=default,显式要求编译器生成合成版本构造函数或者赋值,析构函数。

9.使用=delete来组织拷贝,不能删除析构函数。

10.本质上,当不可能拷贝、赋值或销毁类的成员时,类的合成拷贝控制成员就被定义为删除的。

11.赋值运算符组合了析构函数和构造函数的操作,先拷贝右侧对象,释放左侧对象资源,再赋值。防范自赋值的重要性。

12.智能指针引用计数的原理,自己实现。核心时把计数器保存再动态内存中,当拷贝或赋值对象时,我们拷贝指向计数器的指针。

13.swap函数应该调用swap,而不是std::swap,std::swap并不会隐藏特定版本的swap声明。

14.在赋值运算符中使用swap时异常安全的,能正确处理自赋值。

15.vector在重新分配空间时,避免拷贝原有数据,而是使用移动构造函数。效率更高。

16.右值引用:不能将左值引用绑定到右值,但是可以将右值引用和const左值引用绑定到右值。

17.左值持久,右值短暂。右值绑定即将销毁的对象。

18.可以使用move来将右值引用绑定到左值。move调用使用std::move而不是move。

19.移动构造函数,noexcept关键字。

20.左值和右值,拷贝构造函数都是可以的,但是移动构造函数只能时右值。且右值对移动构造函数更为精准匹配。

21.三/五原则:5个拷贝控制成员时一个整体,定义了一个,就应该定义所有。

22.区分拷贝和移动构造函数的方法:前者接受const T&,后者接受T&&。

23.引用限定符:&和&&,指出this可以指向一个左值或右值。

24.右值进行sort时可以原址排序很安全。对象时右值,意味着没有其他用户。左值则不然,需要先拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值