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

前言

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

1.深拷贝与浅拷贝

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

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

c++中浅拷贝与深拷贝浅析
程序运行结果:
c++中浅拷贝与深拷贝浅析
修改拷贝函数:
c++中浅拷贝与深拷贝浅析
此时运行输出正确结果:
c++中浅拷贝与深拷贝浅析

问题分析与解决

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

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

解决:
开辟一块新的内存,把拷贝的数据存放在其中。这样在运行析构函数时,就不会出现重复释放的问题!
c++中浅拷贝与深拷贝浅析