https://www.jb51.cc/csharp/1193403.html

编程之家收集整理的这篇文章主要介绍了C++---浅拷贝、深拷贝、写时拷贝讲解(附代码)浅拷贝深拷贝写时拷贝编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对于普通的类型来说,拷贝没什么大不了的。

不会出现任何问题。

而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。

浅拷贝

首先来说说我们常遇到的浅拷贝的情况。

这段代码乍看之下没什么毛病,通过类的认构造函数将 a 复制给 b ,但是一旦运行就会程序崩溃。 经过我的刻苦学习与钻研,终于发现其中的问题所在。 由于我的类没有拷贝构造函数,所以student b(a)调用,编译器自动生成一个认拷贝构造函数,该构造函数完成对象之间的位拷贝。位拷贝又称浅拷贝浅拷贝

如何避免浅拷贝害人呢? 养成自定义拷贝构造函数的习惯,当显式定义了拷贝构造函数后,编译器就会调用拷贝构造函数了,为了不出现程序崩溃,请使用自定义拷贝构造函数,当然我们自己如果把代码写成了浅拷贝的形式,那也不是不可能的事。

深拷贝

在拷贝构造函数中,为 b 对象 new 了一个新的空间,这样 a 和 b 指向的是不同的空间,只是内容一致,但是互不影响。 重复的去开辟空间和释放空间效率是很低的,聪明的地球人决定使用写时拷贝。

写时拷贝

写时拷贝:引入一个计数器,每片不同内容的空间上都再由一个计数器组成,在构造第一个类指向时,计数器初始化为1,之后每次有新的类也指向同一片空间时,计数器加 1 ;在析构时判断该片空间对应计数器是否为1,为1则执行清理工作,大于1则计数器减 1 。如果有需要进行增删等操作时,再拷贝空间完成,有利于提高效率。

相关文章

总结

以上是编程之家为你收集整理的C++---浅拷贝、深拷贝、写时拷贝讲解(附代码)浅拷贝深拷贝写时拷贝全部内容。