类中的浅拷贝与深拷贝随笔

c++中的默认的拷贝函数,会把所有属性都给拷贝。

现在假如有个指针型 比如 int* height 数据

当我们在有参函数中使用了这么个语句:

Person(int h)

{

  height=new int (h); //height是属性   定义是 int*height

}

这条语句 由我们自己开辟了名为height的空间 放到了堆区 在析构函数里 我将它delete

 ~person()

{

  delete(height);

  height=NULL;

}

这样写会带来什么问题呢?

由于系统自带的拷贝函数,那么我在进行对象拷贝的时候,会把height这一片空间拷贝过去,也就是公用的一个地址。当我在delete(height)之后,这片空间就消失了。其它的对象在拷贝的时候,访问就会出问题。

所以应该如何修改呢?

不再使用默认的拷贝函数,而是自己创造拷贝函数。

Person(const Person &p)

{

  height=new int (*p.height);

}

区别:使用默认的拷贝函数,两个对象会共用同一片height空间;

而自己写的这行,是开辟了一个新的height空间,然后给它赋值。

2022-02-06

 

上一篇:原 JEECMS导入IDEA进行二次开发图文教程


下一篇:自己写了个H5版本的俄罗斯方块