Article
C++构造析构 中 深拷贝与浅拷贝案例详解
00 分钟
2019-8-16
2023-5-21
type
status
category
date
slug
summary
tags
icon
Last edited time
May 21, 2023 07:57 AM

分析详解

1、 在main中执行Teacher t1(1,”edh”);之后, 栈中开辟了一个T1存放了id:1和一个指针char* name 在堆中开辟了一个空间,存放了"edh", 并且让指针指向了这块区域
notion image
仅执行Teacher t1(1,"edh")执行截图
notion image
2、在main中执行了Teacher t2(t1);之后,调用了默认的拷贝构造函数 在栈中再开辟了T2,存放了和T1一样的id和指针 且指针指向同一个堆内区域"edh"
notion image
3、当test()函数执行完毕之后,后构造T2先被析构 此时T2的name指针指向了NULL,堆中堆"edh"已经被释放了 接着析构T1的时候,析构函数再次想要析构name指针,访问非法空间,报段错误,程序崩溃
notion image
程序崩溃错误
notion image
4 解决方法:显示的提供一个拷贝构造函数,来完成深拷贝动作
notion image
之后析构的时候,各自释放各自的堆空间,互不影响
notion image

源代码


评论