前言
最近学习到c++中类的构造与析构函数的时候发现深拷贝与浅拷贝的一些问题,记录一下。
1.深拷贝与浅拷贝
c++通过拷贝构造函数实现对象拷贝,可以完成对象的数据成员简单的复制,系统默认的拷贝构造函数一般为浅拷贝。在拷贝构造函数中分配内存,将入参对象的指针变量指向的内存全部拷贝一份,就是深拷贝。
代码如下(示例):
此时为系统默认的浅拷贝:出现了问题
程序运行结果:
修改拷贝函数:
此时运行输出正确结果:
问题分析与解决
问题:
这个问题的出现是由于在程序运行过程中把第一组数据lding拷贝到第二组cq中时,拷贝过程本身是没有问题的,能够正常的拷贝出数据,但由于程序中第27行出现了问题,是由于lding的析构函数发生作用时,把m_height已经释放,此时已经以为空。但是cq执行析构函数时,没有数据可以释放,则在程序中出现了如图的问题。
解决:
开辟一块新的内存,把拷贝的数据存放在其中。这样在运行析构函数时,就不会出现重复释放的问题!