c++中浅拷贝与深拷贝浅析

本文探讨了C++中类的构造函数和析构函数在处理对象拷贝时,深拷贝与浅拷贝的区别。通过示例代码展示了系统默认的浅拷贝导致的问题,即在析构过程中可能出现的数据释放问题。为了解决这个问题,文章提出了在拷贝构造函数中进行内存重新分配以实现深拷贝的方法,确保每个对象都有独立的数据副本,避免了析构时的数据异常。
摘要由CSDN通过智能技术生成

前言

最近学习到c++中类的构造与析构函数的时候发现深拷贝与浅拷贝的一些问题,记录一下。

1.深拷贝与浅拷贝

c++通过拷贝构造函数实现对象拷贝,可以完成对象的数据成员简单的复制,系统默认的拷贝构造函数一般为浅拷贝。在拷贝构造函数中分配内存,将入参对象的指针变量指向的内存全部拷贝一份,就是深拷贝。

代码如下(示例):
此时为系统默认的浅拷贝:出现了问题

在这里插入图片描述
程序运行结果:
在这里插入图片描述
修改拷贝函数:
在这里插入图片描述
此时运行输出正确结果:
在这里插入图片描述

问题分析与解决

问题:
这个问题的出现是由于在程序运行过程中把第一组数据lding拷贝到第二组cq中时,拷贝过程本身是没有问题的,能够正常的拷贝出数据,但由于程序中第27行出现了问题,是由于lding的析构函数发生作用时,把m_height已经释放,此时已经以为空。但是cq执行析构函数时,没有数据可以释放,则在程序中出现了如图的问题。

在这里插入图片描述

解决:
开辟一块新的内存,把拷贝的数据存放在其中。这样在运行析构函数时,就不会出现重复释放的问题!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值