C深拷贝与浅拷贝的区别,深拷贝和浅拷贝的区别

赋值、浅拷贝、深拷贝的区别有哪些?

C深拷贝与浅拷贝的区别,深拷贝和浅拷贝的区别


我用java实例来给你演示一下://头class Head{} //身体class Body{}//脚class Footer{}//人class Person{String name;Head head;Body body;Footer footer;}赋值Person myself = new Person(); //创建一个我自己Person son = myself ; //我是我妈妈的儿子【引用】Person husband = myself ;//我是我老婆的老公【引用】上面三个变量: myself、son 、husband 都是指代我自己,我在现实中只有一个,所以三个变量引用的是同一个对象(这儿是人),变量相当于称呼浅拷贝Person myself = new Person(); //创建一个我自己Person copy = new Person(); //创建一个副本copy.head = myself.head;copy.body = myself.body;copy.footer = myself.footer;myself和copy引用的不是同一个对象,但是myself中的属性引用的是同一个,即: 共用了head、body、footer很明显浅拷贝容易引起很多问题 。
2个对象不同,但是对象的属性引用相同深拷贝Person myself = new Person(); //创建一个我自己Person deepCopy = new Person(); //创建一个副本myself 与deepCopy两个对象不同(引用地址不同)并且两个对象中的属性name、head、body、footer都不同 。
【C深拷贝与浅拷贝的区别,深拷贝和浅拷贝的区别】如何理解C中的深拷贝和浅拷贝?
C深拷贝与浅拷贝的区别,深拷贝和浅拷贝的区别


关于C对象的拷贝,大部分时间我们用的都是浅拷贝,比如赋值符号(“=”)以及memcpy()等 。那么既然浅拷贝这么简单,为什么还需要深拷贝呢?两者之间的区别又是什么呢?两者分别在什么情况下使用呢?可能很多人写了很久的代码,都还只知道对象赋值而不知道深拷贝,导致很多时间出现莫名bug而且找不到原因 。今天就让我们深入的来了解一下两者的区别 。
浅拷贝例如:class MyClass{public: MyClass(int x); ~MyClass(); int a ;private:};MyClass::MyClass(int x){ this-

    推荐阅读