浅拷贝与深拷贝的区别

2024-12-02 09:57:48
推荐回答(1个)
回答1:

一.深拷贝

  1. 源对象和副本对象是不一样的两个对象。

  2. 源对象引用计数不变,副本对象计数器为1(因为是新产生的)。

  3. 至少有一层是对象复制。

二.浅拷贝

  1. 源对象和副本对象是同样的对象。

  2. 源对象(副本对象)引入计数器+1,等同于做一次retain的操作。

  3. 本质:没有生产新的对象。

从整体上来讲,深拷贝和浅拷贝的不同地方主要还是在于指针(或与指针)方面,浅拷贝仅仅是简易的将源对象(这里是指广义的对象,不只是单指类的实例)的指针赋值给目标对象,对目标指针的操作就是对源对象的操作,因此在大部分情况下,目标对象析构(或跳出其可见域)之后,源对象相关部分也就一同析构了。而深拷贝,是为目标对象重新分配空间,这样就能够和源对象的操作区分。