C++为何会出现深浅拷贝问题(引出对JAVA内存机制的思考?)
一、首先说一下为什么会出现深浅拷贝的问题?
所谓拷贝就是平常意义的复制,至于深浅,就因为一个东西:指针!
指针拷贝的时候,如果有指针,那么也就是对指针的拷贝,指针怎么拷贝?
指针本质也就是一个存储地址的整型,所以拷贝的时候,也就是把指针本身进行复制,这样就导致一个问题:本体与复制体的指针成员实际是一个值(地址值),那么他们会操作同一个地址的内存内容,在析构的时候,就出现问题了,本体或者复制体进行析构的时候,将指针成员kill了,即把指针成员对应的地址内容kill掉了,
那么另外一个复制体或者本体的指针成员怎么办????
野指针啊! 就因为这个原因,为了让程序猿对这个问题加深认知,就出现了两个名词:深拷贝、浅拷贝!实际并没有什么深拷贝和浅拷贝,出现这两个词的原因也就是为了让你随时记住指针问题!万恶的指针!如果你对指针有着极其深刻的认知,随时能注意指针的动向,那么深拷贝、浅拷贝?忽悠小孩子的啦~
二、在java的对象赋值时,传递的是地址,这也就导致了我们改变复制对象的值时,源数据的值也会跟着改变。
参考:https://www.zhihu.com/question/36370072/answer/1241929986