深拷贝与浅拷贝
深拷贝与浅拷贝
在构造函数会涉及到的拷贝函数:
拷贝函数中内存的释放
例如:
1 | class person{ |
**person p2(p1);**这里的拷贝属于编译器自己的浅拷贝;
他会把p1对应的m_age的值给p2对应的m_age;将p1的m_height 的地址拷贝给p2的m_height.
理想输出是:
p1的年龄为: 18 p1的身高为:160
p2的年龄为: 18 p2的身高为:160
但是在main函数运行的时候会崩
原因分析:
当调用test函数时,栈区中p1中申请了堆区数据m_height,按照编译器默认的浅拷贝再将m_height的地址传给了p2中的m_height。那么在test函数调用结束的时候按照栈的存储方式(先进后出)p2会先释放掉m_height,那么当p1释放的时候m_height已经被释放掉了,所以导致了程序崩。
解决方式
自己实现一个深拷贝函数,将p2的m_height内存指向另一个地址含有相同的值的地方,那么在内存释放的时候就不会矛盾。
深拷贝函数:
1 | //深拷贝函数 |
如此便可以做到预期的结果。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 hexo-夏橘小站!