浅拷贝:指对象在复制时,只对对象的数据成员进行简单地赋值,而不复制对象本身,新旧对象还是共享同一块内存即只是增加了一个指针指向已存在的内存地址。因为共享同一份资源,当一个对象将这份资源释放掉,而此时另一个对象并不知道该资源已经被释放,当再次进行资源释放时,就会发生崩溃。
深拷贝:是增加了一个指针并且申请了一个新的内存,这个新增加的指针指向新的内存,新对象和旧对象不共享内存,修改新对象不会影响到旧对象。不会因为多个对象之间共享资源造成多次释放程序奔溃问题。
写时拷贝:是为了使用浅拷贝的方法,又避免对资源的多次释放,对浅拷贝的一次优化,多个对象共享同一份资源,只让最后一个对象负责释放。
为了确定那个对象是最后一个对象,可以在资源上添加一个计数器,记录当前实时试用该资源的对象有几个,最后只能够可以去确定某个对象是最后一个管理资源的对象就让该对象来负责释放资源。
深拷贝和浅拷贝的的区别主要在于是否真正获取一个对象的复制实体,而不是引用。