一、拷贝构造函数:

格式: 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即可。

C++中的拷贝构造函数的更多相关文章

  1. 关于C++中的拷贝构造函数和赋值函数

    如果类定义的数据成员中存在指针或引用,那么最好重载这两个函数. 1.     定义 拷贝构造函数的定义格式:构造函数名(const 源类名& 引用对象形参名){} 赋值函数定义格式:源类名 & ...

  2. C/C++中的拷贝构造函数和赋值构造函数

    代码: #include <iostream> #include <cstdio> using namespace std; class A{ public: A(){ cou ...

  3. C++:构造函数2——拷贝构造函数

     前言:拷贝构造函数是C++中的重点之一,在这里对其知识进行一个简单的总结. 一.什么是拷贝构造函数 在C++中,对于内置类型的变量来说,在其创建的过程中用同类型的另一个变量来初始化它是完全可以的,如 ...

  4. C++中的构造函数,拷贝构造函数和赋值运算

    关于C++中的构造函数,拷贝构造函数和赋值运算,以前看过一篇<高质量C++/C编程指南>的文章中介绍的很清楚,网上能搜索到,如果想详细了解这方面的知识可以参看一下这篇文章. 常见的给对象赋 ...

  5. C++中构造函数,拷贝构造函数和赋值函数的区别和实现

    C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...

  6. C++中的构造函数,拷贝构造函数,赋值函数

    C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...

  7. C++中拷贝构造函数

    C++中拷贝构造函数 1.什么是拷贝构造函数: 拷贝构造函数嘛,当然就是拷贝和构造了.(其实很多名字,只要静下心来想一想,就真的是顾名思义呀)拷贝又称复制,因此拷贝构造函数又称复制构造函数.百度百科上 ...

  8. c++中拷贝构造函数,浅拷贝和深拷贝的区别

    在C++提供了一种特殊的构造函数,称为拷贝构造函数.拷贝构造函数具有一般构造函数的所有特性,其作用是使用一个已经存在的对象(由拷贝构造函数的参数指定的对象)去初始化一个新的同类对象,即完成本类对象的复 ...

  9. 理解C++中拷贝构造函数

    拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同样对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象的时候系统会自动调用它:其形参是本类对象的引用,它的特殊功能是将参数 ...

随机推荐

  1. python3爬取高清壁纸(2)

    上次只是爬取一个专辑的图片,这次要爬取一整个页面的所有专辑的图片. 在上次的代码的基础上进行修改就行了,从专辑的索引页面开始,爬取该页面上所有的专辑的链接,再套用上次的代码就行了. 若要爬取多个页面只 ...

  2. js处理json字符串

    后台输出的字符串为 res= {"result":"true","data":"提交成功"} 前台js无法转化成对象,需 ...

  3. hdu2328 后缀树

    #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #in ...

  4. java+layui的Excel导入导出

    html: <button class="layui-btn" onclick="exportData();">导出</button> ...

  5. java 数字转换格式化

    1.小数格式化后转字符串百分数(带%)输出 NumberFormat nt = NumberFormat.getPercentInstance(); //设置百分数精确度2即保留两位小数 nt.set ...

  6. mybatis(六):设计模式 - 组合模式

  7. k8s集群应用例如jenkins启动问题排查思路

    k8s集群应用例如jenkins启动问题排查思路 待办 rancher上的事件报告>pods日志>pods内容器日志(现获取容器id再查看容器日志,获取容器id 使用的是相应问题pod的名 ...

  8. sql避免科学计数法并保留两位小数

    SELECT trim(to_char(), ), ,), '9999,999,990.00')) AS CAvgPrice FROM POSITION a 结果: 以trim(to_char(ROU ...

  9. Docker - ubuntu 镜像安装网络工具

    概述 给 ubuntu 镜像, 安装一些基本的网络工具 背景 尝试学习的时候, 需要检测网络的连通性 没有这些工具, 绕了不少弯路 工具们 ping ip a 环境 docker 18.09 ubun ...

  10. selenium选择框

    自动化测试中,会遇到选择框,针对该类元素,selenium提供类Select类来处理,使用select类先导入:from selenium.webdriver.support.select impor ...