一、拷贝控制操作

​ 当定义一个类时,显示或隐式地指定了此类型的对象在拷贝、赋值和销毁时所执行的操作,通过三个特殊的成员函数来控制这些操作,分别是拷贝构造函数,赋值运算符和析构函数。拷贝构造函数定义了当使用同类型的另一个对象初始化新对象时的操作,赋值运算符定义了将一个对象赋值给同类型的另一个对象时的操作,析构函数定义了此类型的对象销毁时执行的操作,这些操作统称为拷贝控制操作

二、什么时候需要拷贝控制操作

​ 如果一个类没有定义所有这些拷贝控制成员,编译器会自动为它定义默认的操作,因此很多类会忽略这些拷贝控制操作。但是,对于一些持有其他资源(例如动态分配的内存、打开的文件、指向其他数据的指针、网络连接等)的类来说,使用这些默认的操作无法满足实际需求,切会导致严重的后果,因此必须显式的定义这些操作。

​ C++ 并不要求我们定义所有的这些操作,你可以只定义其中的一个或两个。但是,这些操作通常应该被看做一个整体,只需要定义其中一个操作,而不需要定义其他操作的情况很少见。

1. 需要析构函数的类也需要拷贝和赋值操作

​ 是否需要为一个类显示的定义拷贝构造函数和重载赋值运算符,一个基本的原则就是首先确定这个类是否需要一个析构函数。通常对析构函数的需求通常比拷贝构造函数和重载赋值运算符更加明显,如果一个类需要定义析构函数,那么几乎可以确定这个类也需要拷贝构造函数和重载赋值运算符。

2. 需要拷贝操作的类也需要赋值操作,反之亦然

​ 很多类需要定义拷贝控制成员,但是有些类所要完成的工作,只需要拷贝或者赋值操作,不需要析构操作。比如说一个类为每一个对象分配一个独有的,唯一的ID,这个类需要一个拷贝构造函数来为每个新创建的对象生成一个新的ID,,还需要重载赋值运算符来避免将一个对象的ID赋值给另一个对象,但是这个类并不需要析构函数。也就是说,如果一个类需要一个拷贝构造函数,几乎可以肯定也需要重载赋值运算符,反之亦然。但是,无论需要拷贝构造函数还是需要重载赋值运算符,都不必然意味着需要析构函数。

最新文章

  1. JS将秒转换为 天-时-分-秒
  2. Hadoop 2.6.0+ZooKeeper+Hive HA高可用集群安装
  3. CuteSTL——跟着感觉造轮子
  4. [SqlServer]创建链接服务器
  5. js用正则表达式控制价格输入
  6. Android中的事件分发和处理
  7. 在ADS上由于volatile惹得祸
  8. String.equals()
  9. nginx添加需要代理的域名 配置
  10. Android 动画系列
  11. Struts2学习笔记(一) Struts2配置文件的配置
  12. Jenkins构建Android项目持续集成之单元测试及代码覆盖率
  13. 使用svn与maven管理的项目导入Eclipse,但是与本地svn客户端关联不上?
  14. 调用接口,发送https请求
  15. memcache 相关
  16. react 项目搭建
  17. Windows文件系统
  18. 4.Java的流程控制.md
  19. Java登陆拦截器
  20. Jquery easyui 重置按钮,easyui 清空表单,Jquery easyui 重置表单

热门文章

  1. 【转】MySQL理解索引、添加索引的原则
  2. C++ 实现strcpy
  3. Linux下DHCP服务安装配置
  4. android.view.WindowManager$BadTokenException: Unable to add window
  5. 快速排序的php实现
  6. Dubbo与Zookeeper在Window上的安装与简单使用
  7. Luogu3676 小清新数据结构题 动态点分治
  8. BZOJ2125 最短路 圆方树、倍增
  9. CF1097D Makoto and a Blackboard 积性函数、概率期望、DP
  10. Luogu1979 NOIP2013D2T3 华容道 搜索、最短路