C++ primer阅读之拷贝控制

本文深入探讨了拷贝构造函数、拷贝赋值运算符及析构函数等拷贝控制概念,解析了它们的区别与联系,强调了在C++中正确使用这些机制的重要性。此外,还讨论了移动构造函数的作用与实现细节,以及右值引用如何提高效率。

第十三章 拷贝控制

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、付费专栏及课程。

余额充值