其中,const可以不写(但通常建议这么做),由于复制的作用要用到传递参数、返回值,这些都是隐式的调用,所以一定不能将其声明为explicit。所以可以知道explicit的作用是承认在可能的情况下,系统默认在需要使用该函数的情况下,能不能自动使用。

  从前面我们说可以将组装复制构造函数用相应的带有完全初始化列表的构造函数来代替,我们可以发现,复制构造函数要实现的功能基本稳定,所以通常组装复制构造函数基本可以满足要求。

  所以我们经常不怎么自己定义复制构造函数,但是有些时候程序实现要求我们必须自定义构造函数,这个时候我们表明了,构建复制构造函数的困难之处,不在于语法,它与普通的构造函数是一样的;关键是在,构建这个东西的用途,当用途明确后,其他简单了。

  有些时候,例如

  1)对象成员是一个指向某个资源的指针(用户本意不想只是复制指针,那表明没有复制指针指向的对象),

  2)或者该类型规定每新建一个对象需要做一些动作,那么这个时候需要自定义复制构造函数

  (注意哦!与普通构造函数一样,构造函数理论上的功能包括空间分配、元素初始化,以及相关处理,那个复制初始化符号“=”左右应该看成一个整体。)

  3)或者该类型的每个对象都富有一个ID成员的机制

  (5)如何阻止类的复制初始化功能

  1)我们知道,我们使用explicity可以声明,该复制构造函数不能被隐式使用,于是在参数、返回值的那些地方都不能用,但是如何让普通的复制初始化也不用呢?那是声明为private。我们说过。构造函数的特殊还在于,它是直接被外层使用的,不需要套一个什么类的帽子(因为它是类名),所以如果申明为private那么不能使用了,这是为什么大部分的构造函数都被申明为public了。