深层复制构造函数和浅层复制构造函数区别

来源:互联网 发布:关键词排名优化方案 编辑:程序博客网 时间:2024/04/29 19:18
构造函数用来初始化对象的,复制构造函数是把一个已知的对象复制给新的对象,(2者都是对象)。
浅复制构造函数只复制指针(换句话说就是2个对象的地址一样),例如
class A
{
pubic:
  A(){x = new int; *x =  8;}
  A(const A &a)
  {
   x = a.x   //浅层复制构造函数
  }
  ~A(){delete x; x = NULL;}
private:
int *x;
}
深复制构造函数定义内new了一个新地址,因此2个对象的地址不一样,析构2个对象的时候不会象浅复制构造函数那样重复析构一个地址了。例如
class A
{
pubic:
  A(){x = new int; *x =  8;}
  A(const A &a)
  {
   x = new int;    //注意区分x,这个x是复制的对象中的指针x
   *x = *(a.x)   //浅深层复制构造函数
  }
  ~A(){delete x; x = NULL;}
private:
int *x;
}
 
重点是区分概念,和区分x,要不很容易混乱
另外补加一个小概念,对于高大上的“级连”,比如说cout语句能实现级连,就是指提取运算符"<<"能连续使用,例如cout<<x<<y<<z;这里的"<<"用了三次
0 0
原创粉丝点击