拷贝构造函数----深拷贝、浅拷贝

来源:互联网 发布:猪八戒淘宝刷销量 编辑:程序博客网 时间:2024/05/17 06:56
拷贝构造函数----深拷贝、浅拷贝
【何时调用拷贝构造函数】:
    1-函数的参数时该对象时(按值传入)
    2-函数的返回值是该对象时
    3-该类对象的其中一个对象需要通过另一个对象进行初始化时。

【浅拷贝复制的缺陷】:
     当复制的对象为动态申请内存的对象时,浅拷贝复制的对象,乍一看时对象进行了复制,其实是对其指针进行了复制。
     既,对象的内容没真正的拷贝过去,而是将其地址拷贝了过去。
     此时若对原始对象进行修改,复制后的对象也会改变(相当于通过指针进行改变),出错!
     同时,释放内存时,相当于动态分配指针的内存区域释放了两次(二者占有同一份内存空间,都是对同一个指针进行了释放),导致运
    行错误!
【解决方法】:
      1-自己编写拷贝构造函数,实现深拷贝。
      2-自己编写析构函数,实现对不同内存区域的释放。
【深拷贝构造函数】:
      就是对复制对象的每个元素进行复制,而不是仅仅复制指针。
      例如:
 Matrix::Matrix(const Matrix& a)
 {
  int i, j;
  m = new int*[a.lines];
  for (i = 0;i < a.lines;i++)
   m[i] = new int[a.rows];
  for (i = 0;i < a.lines;i++)
   for (j = 0;j < a.rows;j++)
    m[i][j] = a.m[i][j];
 }

原创粉丝点击