如何理解 C++ 中的深拷贝和浅拷贝
1个回答
展开全部
1、浅拷贝:复制堆栈中的值。
2、深拷贝:复制堆(指针)中的值。
3、一旦出现指针必须进行深拷贝的原因在于:浅拷贝复制当前变量的值。若变量为指针,则是复制指针所指向的地址,此时会导致,复制方和被复制方的指针同时指向同一个位置,一旦被复制方超出作用域被析构,那么复制方的指针所值的位置的数据也一同被析构。结果指针悬垂。
4、简单举例:
有一个橙子,A(复制方)和B(被复制方)两个人,橙子必须要整个吃掉才会使人满足。那么:
若B把橙子吃掉了,A就没有橙子吃了。
若A把橙子吃掉了,B就没有橙子吃了。
所以,独享一个橙子才是关键,深拷贝就是多拿一个橙子,2个人可以独自享用自己的橙子。
即,复制方根据被复制方的大小信息,先创建一个指向别的位置的同等大小的内存块,然后再把被复制方的数值复制到这个新的内存块中,由此可以保证不共享同一位置的数据。
2、深拷贝:复制堆(指针)中的值。
3、一旦出现指针必须进行深拷贝的原因在于:浅拷贝复制当前变量的值。若变量为指针,则是复制指针所指向的地址,此时会导致,复制方和被复制方的指针同时指向同一个位置,一旦被复制方超出作用域被析构,那么复制方的指针所值的位置的数据也一同被析构。结果指针悬垂。
4、简单举例:
有一个橙子,A(复制方)和B(被复制方)两个人,橙子必须要整个吃掉才会使人满足。那么:
若B把橙子吃掉了,A就没有橙子吃了。
若A把橙子吃掉了,B就没有橙子吃了。
所以,独享一个橙子才是关键,深拷贝就是多拿一个橙子,2个人可以独自享用自己的橙子。
即,复制方根据被复制方的大小信息,先创建一个指向别的位置的同等大小的内存块,然后再把被复制方的数值复制到这个新的内存块中,由此可以保证不共享同一位置的数据。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询