C++浅拷贝和深拷贝

        前提被拷贝的对象是一个类实例,对类实例进行拷贝时,会调用拷贝构造函数;如果自己没有定义拷贝构造函数,编译器则会调用默认拷贝构造函数,这种情况是浅拷贝。可能存在问题,如果构造函数中存在指针成员,实例化对象时会先走构造函数,再走析构函数;浅拷贝时,会走默认拷贝构造函数和析构函数。这里走了两次析构函数,析构函数会回收指针指向的堆内存,第一次正常回收,但是第二次回收时,该内存已经不存在了,就会导致指针悬空(野指针),程序异常结束。

        为了避免以上问题,需要自己定义拷贝构造函数,对类实例进行拷贝时就是深拷贝。拷贝类实例时走拷贝构造函数,会对指针再次开空间,走析构时把此空间回收,程序正常结束。

        简而言之,浅拷贝只是把指针复制一遍,两个指针指向同一片内存;深拷贝把指针复制的同时,并为其开空间,两个指针指向的是不同的内存。

        浅拷贝:简单的值拷贝操作。问题:堆区内存重复释放,造成异常。

        深拷贝:拷贝值的同时并为其在堆区重新申请空间,进行拷贝操作;解决浅拷贝的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小道道.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值