C++深拷贝与浅拷贝
C++在涉及到类的拷贝时,有深拷贝和浅拷贝两种情况,默认情况下的拷贝构造函数是浅拷贝。
1.深拷贝与浅拷贝区别:
当类的数据成员中没有涉及到指针时,可以使用默认情况下的浅拷贝构造函数。
当类的数据成员中涉及到指针时,如果再使用浅拷贝,就会出现指针悬挂现象(当两个对象的数据成员中指针指向同一块内存,在程序运行完毕调用析构函数释放对象1后,另一个对象2的数据成员依旧指向在这块内存,此时又调用对象2的析构函数,此时程序便卡死了)。
解决这个问题,必须使用深拷贝。深拷贝会用new语句在堆内存中另外申请空间来储存数据,从而也就解决这个问题。也就是说,深拷贝不再是简单的把地址拷贝过去,而是把指针指向的内容一概拷贝过去。
总之,当数据成员中有指针时,必须要用深拷贝。
2.实例解释
array.h
//浅拷贝和深拷贝
//浅拷贝涉及到指针时,将出现一些问题,由深拷贝来解决
class Array
{
public:
Array(int count);
~Array();
Array(const Array& arr);//拷贝构造函数
void setCount(int count);
int getCount()