背景
若自定义一个拷贝构造函数,那么就会调用默认拷贝构造函数,而默认拷贝构造函数则只会进行浅拷贝。
tips:
- 位拷贝与浅拷贝为同一个概念。
- 浅拷贝:拷贝对象会将被拷贝对象的所有值复制过来(如变量值,指针指向的地址)
- 深拷贝:拷贝对象会根据被拷贝对象的所有值的空间大小,重新在堆区上申请一个空间将被拷贝对象的所有元素拷贝到这个新空间,从而修改这个空间的元素并不会影响被拷贝对象的元素值。
触发拷贝构造函数的情况
- 赋值
class A;
int main()
{
A a;
A b = a;
A c(a);
return 0;
}
- 函数传参,形参为类对象
- 函数返回值
默认拷贝构造函数的生成
由编译器生成默认拷贝构造函数,存在以下情况时,编译器会生成该函数:
- 类成员变量也是一个类,该成员类有默认拷贝构造函数
- 类继承自一个基类,该基类有默认拷贝构造函数
- 类成员存在虚函数成员
tips:默认拷贝构造函数并不会进行深拷贝!当类涉及到动态内存分配、资源句柄或其他需要特殊管理的资源时。在这些情况下,程序员通常需要自定义拷贝构造函数来确保资源的正确复制和管理。
(待补充)