10.0 C++远征:深拷贝与浅拷贝

3-1深拷贝与浅拷贝

1.浅拷贝

class Array{
public:
	Array(){
    	m_iCount = 5;
	}
	Array(const Array& arr){	// 拷贝构造函数
    	m_iCount = arr.m_iCount;
	}
private:
	int m_iCount;
}

int main(){
	Array arr1;
	Array arr2 = arr1;	// 浅拷贝
	return 0;
}

另一个例子:

class Array{
public:
	Array(){
    	m_iCount = 5;
	}
	Array(const Array& arr){	// 拷贝构造函数
    	m_iCount = arr.m_iCount;
    	m_pArr = arr.m_pArr;
	}
private:
	int m_iCount;
  	int *m_pArr;
}

int main(){
	Array arr1;
	Array arr2 = arr1;	// 有问题的浅拷贝
	return 0;
}

问题所在:

两个对象arr1和arr2的各自的成员m_pArr都指向了同一内存,arr2的成员m_pArr的赋值操作将会覆盖掉arr1的成员m_pArr。最严重的是当arr1和arr2对象先后被销毁时,二者的成员m_pArr所指向的内存将会被释放两次!这将引起程序的崩溃。

2.我们所想要的是这样子的:

如何做呢?

深拷贝:

使用数组,将每个元素都一一赋值。

原文地址:https://www.cnblogs.com/xiaoqingyang/p/6076887.html