一、拷贝构造函数:

格式: 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. ET框架之SceneChangeComponent

    初始化事件 using ETModel; namespace ETHotfix { [Event(EventIdType.InitSceneStart)] public class InitScene ...

  2. 2-第一个Django程序

    第一个Django程序 从本章节开始将通过实现一个投票应用程序,来让用户逐步的了解Django.这个程序由两步分组成: 公共站点,允许用户访问进行投票,和查看投票. 站点管理,允许添加,删除,修改投票 ...

  3. Intellij IDEA 控制台中文乱码问题

    如果Intellij IDEA 控制台出现中文乱码: 1.修改Intellij IDEA 配置文件: 在安装目录的bin文件夹里找到 idea.exe.vmoptions 和 idea64.exe.v ...

  4. Python | 面向对象中的名词总结

    一.变量名称 (最前的序号表示将来用到的频繁程度) 5 全局变量: 1. 文件中出现的变量,不归属于函数及类:2.在函数用用global声明的变量 2 局部变量: 1.类的方法中没有self.,只能在 ...

  5. .net core 2.2 使用imagemagick 将pdf转化为png

    工作需要将PDF文件每一页拆分为一个一个的png文件 测试环境:mac,visual studio for mac 2019 nuget:magick.net-Q16-AnyCPU 不能直接支持PDF ...

  6. Bridge(Ad Hoc)

  7. Unity Coroutine详解(二)

    •        介绍•        Part 1. 同步等待•        Part 2. 异步协程•        Part 3. 同步协程•        Part 4. 并行协程 1.介绍 ...

  8. 关于使用ssm与spring时,配置tomcat 虚拟目录( doBase )中的一些坑

    一.使用SSM需要 配置虚拟目录时 tomcat的配置 在tomcat server.xml的<HOST></HOST>中加入以下内容 在配置完成之后,当我们访问URL  为  ...

  9. Wx-公众号-关闭内置浏览器页面,返回公众号橱窗

    方法一: pushHistory(); function pushHistory() { var state = { title: "title", url: "#&qu ...

  10. jquery--获取input checkbox是否被选中以及渲染checkbox选中状态

    jquery获取checkbox是否被选中 html <div><input type="checkbox" id="is_delete" n ...