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.我们所想要的是这样子的:
如何做呢?
深拷贝:
使用数组,将每个元素都一一赋值。