一、拷贝构造函数:

格式: A(const  A& a); 

总结:

系统为对象B分配了内存并完成了与对象testA的复制过程,就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。

1.拷贝构造函数的使用:

A testA;

A B = testA;

2.析构的先后顺序:

程序结束,析构的时候,先析构了B,后析构了testA.

二、拷贝构造函数的调用时机

1、当函数的参数为类的对象时;

调用copy_constructor_fun(A aA)时,会产生以下几个重要步骤:
(1)、A对象传入形参时,会先产生一个临时变量Temp;

(2)、然后调用拷贝构造函数把A的值给Temp。

(3)、等copy_constructor_fun()指向完毕后,析构掉Temp。

2、函数的返回值是类的对象

 3、对象需要另外一个对象进行初始化

A testA(100);

A B = testA;

或者:
A C(testA);

三、深拷贝和浅拷贝

1、默认拷贝构造函数

2、浅拷贝

简单的值复制,比如上面几个例子,都是浅拷贝,默认的拷贝构造函数都是浅拷贝。

3、深拷贝

深拷贝主要用于类中有指针成员变量时,防止析构的时候指针悬挂现象。

因为默认的拷贝构造函数只是简单的值复制,如果存在指针变量,相当于两个指针指向同一块内存地址,析构的时候,该块内存地址会被析构两遍,那么当第一次被释放之后,后面指向该内存的指针就会存在悬挂的现象。

深拷贝主要是为拷贝的类对象中的指针变量开辟新的内存空间,这样释放的时候,就不会出现悬挂现象。

写明显示的深拷贝构造函数:

四、总结

1.为什么拷贝构造函数的参数必须是引用传递,而不是值传递

防止递归调用。

2、拷贝构造函数的作用

用来复制对象的,使用以一个对象的实例来初始化这个对象的一个新的实例。

3、对一个类A,如果一个构造函数的第一个参数是下列之一:
1) A&

2) const A&

3) volatile A&

4) const volatile A&

且没有其他参数或者其他参数都有默认值,那么这个函数是拷贝构造函数。

4、一个类中可以存在多余一个的拷贝构造函数吗?

答: 类中可以存在超过一个拷贝构造函数。

注意,如果一个类中只存在一个参数为 X& 的拷贝构造函数,那么就不能使用const X或volatile X的对象实行拷贝初始化.
  如果一个类中没有定义拷贝构造函数,那么编译器会自动产生一个默认的拷贝构造函数。
  这个默认的参数可能为 X::X(const X&)或 X::X(X&),由编译器根据上下文决定选择哪一个。

5、构造函数可以重载,析构函数不可以重载。

6、禁止拷贝,禁止赋值操作符

将拷贝构造函数和赋值操作符声明为private即可。

最新文章

  1. LintCode Binary Tree Paths
  2. CommonJS 的 AMD 规范
  3. jQuery1.11源码分析(8)-----jQuery调用Sizzle引擎的相关API
  4. [codeforces 549]G. Happy Line
  5. tuple元组(C++11及以后,如C++14)
  6. win8系统 host文件无法修改解决之道
  7. The 2013 ACM-ICPC Asia Changsha Regional Contest - J
  8. ajax 跳入error的一些原因
  9. Selenium IDE验证点
  10. 1048: [HAOI2007]分割矩阵 - BZOJ
  11. 查看sqlserver数据库的端口号
  12. Java程序员可能犯的3个常见SQL错误
  13. Jquery轻量级幻灯插件-OWL Carousel--支持触屏的移动浏览器
  14. Java I/O输入输出流
  15. mongodb集群配置副本集
  16. Linux内核 设备树操作常用API
  17. Push API
  18. C#打印日志的小技巧
  19. BSDL
  20. HDOJ 4876 ZCC loves cards

热门文章

  1. java基础之 修饰符
  2. 易错之 Java字符串比较
  3. 解决Macbook Pro蓝牙不可用问题
  4. 【C语言】输入三个正整数a,b,c,求最大值,要求定义一个计算最大值的函数max(a,b),返回a,b的值
  5. 洛谷 P3805【模板】manacher算法
  6. auto_ptr的VC版本源码剖析
  7. 2019南昌网络赛 hello 2019
  8. 一篇文章了解JsBridge
  9. gulp 常用方法 任务 插件
  10. SpringMvc中文件的上传