我们在程序中常常需要把一些数据复制一份出来备作它用。对于只有基本类型变量的程序来说,这是轻而易举就能做到的——新建一个临时变量,用一句赋值语句就能完成。但如果它是一个有着许许多多成员数据的对象,这就会非常麻烦。最麻烦的是,那些成员数据还是私有的,根本无法直接访问或修改。那么这时候,我们怎么“克隆”出一个和原来对象相同的新对象呢?
根据程序运行的结果,我们发现输出链表b的内容的确和链表a一样了,并且可以得到三个结论:
(1)拷贝构造函数可以读出相同类对象的私有成员数据。
(2)拷贝构造函数的实质是把参数的成员数据一一复制到新的对象中。
(3)拷贝构造函数也是构造函数的一种重载。
构造函数有默认构造函数,其实拷贝构造函数也有默认的拷贝构造函数。所谓默认拷贝构造函数是指用户没有自己定义拷贝构造函数时,系统自动给出的一个拷贝构造函数。默认拷贝构造函数的功能是将对象的成员数据一一赋值给新创建对象的成员数据。如果某些成员数据本身就是对象,则自动调用它们的拷贝构造函数或默认拷贝构造函数。
程序15.4.1中的拷贝构造函数仅仅是把成员数据拷贝了过来,却没有把动态申请的资源复制,我们把这种拷贝称为浅拷贝。相对地,如果拷贝构造函数不仅把成员数据拷贝过来,连动态申请的资源也拷贝了,则称之为深拷贝。
以上摘自《易学C++》第15章,希望能对LZ有帮助。