当通过同类型的对象实例化另外的对象时,自动调用拷贝构造函数,但拷贝方式分为浅拷贝与深拷贝,以下面代码为例:
class Array int main(void)
{ {public: Array arr1;
Array(){m_icount=5;m_pArr=new int [m_iCount];} Array arr2=arr1;
Array(const Array& arr) return 0;
{ }
m_iCount=arr.m_iCount;
m_pArr=arr.m_pArr;
}
private:
int m_iCount;
int *m_pArr;
}
此处的拷贝构造函数将arr1中的m_iCount和m_pArr的值赋给arr2,称为浅拷贝,但arr1和arr2中的指针m_pArr指向同一内存,在程序运行结束时会释放两次内存,这样计算机就会崩溃,所以在拷贝给arr2中的指针时,需要重新使arr2.m_pArr指向另一内存,如下:
class Array int main(void)
{ {public: Array arr1;
Array(){m_icount=5;m_pArr=new int [m_iCount];} Array arr2=arr1;
Array(const Array& arr) return 0;
{ }
m_iCount=arr.m_iCount;
m_pArr=new int [m_iCount];
for(int i=0;i<m_iCount;i++)
{
m_pArr[i]=arr.m_pArr[i];
}
}private:
int m_iCount;
int *m_pArr;
}