【c++语言基础】深复制与浅复制,深赋值与浅赋值

今天看书,书上有一句话是:


类的设计者通常应该定义复制构造函数,并重载复制操作符,避免出现浅复制和浅赋值问题


但我不太理解什么是浅复制和浅赋值,于是百度搜了一下,理解如下;


浅复制是指当对象的字段值被复制时,字段引用的对象不会被复制·例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅复制,那麽两个对象将引用同一个字符串·


另外一个问题就是,结构体之间的赋值时浅赋值,网上一个大神解释如下:

//就和指针之间的赋值一样,只是指针的内存中的数据被修改,即修改指针保存的地址,并未改变指针指向的内存空间里的数据。


浅层复制:只复制指向对象的指针,而不复制引用对象本身。
 深层复制:复制引用对象本身。意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了两份独立对象本身。
 用网上一哥们通俗的话将就是:浅复制好比你和你的影子,你完蛋,你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。


深拷贝

C++提供了拷贝构造函数接口以及赋值操作符重载函数接口,以便开发者处理动态分配的内存的复制工作,这类复制工作就叫深拷贝。

浅拷贝是系统自动调用的默认赋值操作符重载函数实现,而深拷贝需要开发者实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值