构造函数用来初始化对象的,复制构造函数是把一个已知的对象复制给新的对象,(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;这里的"<<"用了三次