记录3-C++拷贝构造函数的意义
拷贝构造函数的目的就是完成对一个对象的拷贝,一般在一下三种场景下会调用该对象的拷贝构造函数:
1.函数返回类型是类的对象时
2.函数的参数是类的对象,调用该函数时会调用该类的拷贝构造函数
3.使用一个对象去初始化类的另一个对象时 F a = new F(1,2); F b = a; / F b(a) 注意必须要在类的初始化中使用,不是类的赋值
拷贝构造函数的关键意义在与可以实现深拷贝,即实现申请新的内存空间并复制其值。默认拷贝构造函数实现的是浅拷贝,即完成对象的一一辅助但该对象还是指向堆中同一个对象。
为什么要实现自定义的拷贝构造函数?
当构造函数中实现了指针类型,则当多次调用默认的拷贝构造函数后,实际上多个对象都是指向堆中同一个内存,那么当调用析构函数时只有一次真正实现了内存释放,出现了指针悬挂现象。
为什么自定义拷贝构造函数必须是引用传递(&)而不能是值传递?
因为防止无限递归,因为如果是值传递则会再一次调用拷贝构造函数……所以自定义拷贝构造函数必须满足一下要求:
解答:对于一个类X, 如果一个构造函数的第一个参数是下列之一:
a) X&
b) const X&
c) volatile X&
d) const volatile X&
且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数.
顺便提一下C#的拷贝构造函数:
实现方式类似,但是更加简单,这里的previousPerson居然不是引用类型,由此可以看出C#的类对象,在作为函数参数时不会调用拷贝构造函数的……