第一次接触拷贝构造函数是在学习C++的时候,C++对象的复制 如 Person a; Person b=a;在语言层面,在b=a处要调用拷贝构造函数来生成对象b。生成之后的对象就是单独存在的对象了。C++中有默认的拷贝构造函数,但用户可以定制自己的拷贝构造,来达到用户控制哪些数据需要复制,哪些对象不复制。拷贝构造的形式为拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。关于C++的拷贝构造函数有浅拷贝和深拷贝这一概念,默认拷贝为浅拷贝,只对对象中的数据成员进行简单的赋值。浅拷贝存在一些问题,如果原对象指向了一块动态成员,新对象也会指向该内存,导致代码可能无法正常的工作。 最近看Java多线程部分,猛然发现Java也有拷贝构造函数。仔细推敲,Java中的拷贝构造其实指的是:拷贝构造函数就是构造函数的参数的类型是该构造函数所在的类,即参数就是该类的一个对象。Java中的对象要么是new出来,要么是通过反射调用构造,本质还是new出来,或者是通过反序列化将一个序列化了的对象重新加到内存。所以 在Java中 Person a;这一句并不会产生对象,只是产生了一个对象的引用,该引用指向null. Person b=a;自然也不会调用拷贝构造,也是声明了一个引用b,该引用指向的位置和a相同。Java中的拷贝构造函数仅仅是满足“构造函数的参数的类型是该构造函数所在的类,即参数就是该类的一个对象”这一条件的一种构造函数而已。