1.概念:拷贝构造函数是一个特殊的构造函数,它函数名和类型相同,且函数的一个必要的参数必须是此类的引用变量
2.拷贝构造函数调用时机
(1)对象以值传递的方式传给函数
(2)对象以值传递的方式返回
(3)对象需要通过另一个对象初始化
3.浅拷贝和深拷贝
(1)默认拷贝构造函数:它使用旧对象的数据成员的值用值传递的方式一个个给新对象的成员赋值,默认拷贝构造函数没有处理静态成员,当需要拷贝静态成员时,需要重新定义拷贝构造函数
(2)浅拷贝:默认拷贝是浅拷贝的一种,在对象复制时,只对对象中的数据成员进行简单的赋值,大多数情况下浅拷贝都能很好的工作,但是一旦对象存在动态成员,浅拷贝就会出现问题(动态成员所在内存空间在析构时会被释放两次)
(3)深拷贝
在深拷贝的情况下,对于对象中动态成员,会重新动态分配空间
4.防止默认拷贝发送
声明一个私有的拷贝构造函数,因为这样拷贝构造函数是私有的,如果有用户试图按值传递或函数返回该类对象,将得到一个编译错误,从而可以避免按值传递或返回对象。
5.拷贝构造函数的几个细节
(1)拷贝构造函数可以调用private成员变量吗?
拷贝构造函数是一种特殊的构造函数,其操作的还是自己类的成员变量,所以不受private限制
(2)拷贝构造函数形态
对于一个类X,如果一个构造函数的第一个参数是下列之一:
a)X&
b)const X&
c)volatile X&
d)const volatile X&
且没有其他参数或者其他参数都有默认值,那么这个函数是拷贝构造函数
(3)一个类可以存在多个拷贝构造函数
网友评论