什么是深拷贝和浅拷贝?

简单来说,浅拷贝是单纯的传递数值;深拷贝的复制操作。

当我们创建一个对象有指针成员时,若使用浅拷贝则会出现指针指向同一块空间的问题。

举个例子

class Data

{

        int *p;//假如ob1已初始化并且申请空间

}

----------------

Data ob2=ob1;//这就是浅拷贝,用旧对象给新对象赋值

delete ob1;

      

Data ob3;

ob3=ob1;//无法直接赋值,需要重载operator

这时,因为ob2.p跟ob1.p指向的地址一样,所以delete ob1.p会造成ob2.p指向的空间被释放,导致访问错误

而深拷贝是复刻了ob1申请空间的操作,即ob2会申请一块独立的空间

那我们要怎么实现深拷贝的操作呢?

这就需要我们自己来定义拷贝构造函数了

Ob3所要重载的operator也需要考虑指针的问题

注意:不能通过判断是否指向空,delete释放的方式来解决

因为即使释放了空间,指针还需要手动赋值为NULL。这就导致了用浅拷贝时若析构一个对象,则另一个对象的指针会指向一块未被定义的空间,造成段错误。

你可能感兴趣的:(c++)