1.特征
1.拷贝构造函数是构造函数的一个重载形式。
2.若显示定义了拷贝构造函数,编译器就不会自动生成构造函数了。
3.拷贝构造函数的参数只有一个且必须是类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。
4.若未显式定义,编译器会生成默认的拷贝构造函数。默认的拷贝构造函数对象按内存存储的字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。
2.举例
c++语法规定在自定义类型传值传参时会调用拷贝构造。所以在定义拷贝构造函数时需要引用,否则会引发无穷递归调用。
另外为了保护对象中的内容不被修改,建议在前面加上const。
当然,如果我们没有显示定义一个拷贝构造函数,编译器会帮我们自动生成一个。
这个自动生成的拷贝构造函数会帮我们把基本的数据拷贝过来,也就是浅拷贝。当一个类中有指针且这个指针指向的空间存在数据的话,这个自动生成的拷贝构造函数也会原封不动的拷贝过去,当其中一个对象的指针指向的空间被释放掉,另一个类中的指针就会成为野指针。所以遇到这类情况需要深拷贝,不能依赖编译器了。