17.深浅拷贝和写时拷贝

版权声明:本博客为记录本人学习过程而开,内容大多从网上学习与整理所得,若侵权请告知! https://blog.csdn.net/Fly_as_tadpole/article/details/82954591

深浅拷贝


浅拷贝只拷贝指针,但拷贝后两个指针指向同一个内存空间;

深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针指向两个不同地址。

当类成员不包括指针何引用时,浅拷贝并无问题;但对于指针与引用成员,当对象的生命周期结束后,浅拷贝会造成同一块内存单元被释放两次,导致内存泄漏。      

调用拷贝构造函数后,浅拷贝依然还有联系,深拷贝的两个对象完全独立。

浅拷贝类似于文件创建快捷方式,而深拷贝好比文件复制。

编译器默认提供的默认拷贝构造函数是浅拷贝,深拷贝的构造函数需自己实现。


什么是写时拷贝技术:
写时拷贝技术可以理解为“写的时候才去分配空间”,这实际上是一种拖延战术。
举个栗子:

写时拷贝技术原理:
写时拷贝技术是通过"引用计数"实现的,在分配空间的时候多分配4个字节用来记录有多少个指针指向块空间,当有新的指针指向这块空间时,引用计数加一,当要释放这块空间时,引用计数减一(假装释放),直到引用计数减为0时才真的释放掉这块空间。当有的指针要改变这块空间的值时,再为这个指针分配自己的空间(注意这时引用计数的变化,旧的空间的引用计数减一,新分配的空间引用计数加一)。

猜你喜欢

转载自blog.csdn.net/Fly_as_tadpole/article/details/82954591