鱼C论坛

 找回密码
 立即注册
查看: 1096|回复: 3

[已解决]c++指针赋值是深拷贝还是浅拷贝

[复制链接]
发表于 2021-5-8 16:07:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用new开辟了一个空间,让指针a1指向这个空间,然后将a1赋值给b1指针。
这时候用delete删除a1,照理说开辟的空间应该被回收了,b1应该是野指针了。但是b1任然能够指向原开辟的空间,并取到空间中的数据。
指针赋值难道是浅拷贝?可是对比了指针的地址和内容,不应该出现上面说的这种情况啊。
求助大神解释一下,删除a1后,*b1的值仍然能取到3,是怎么回事。
  1. int main()
  2. {
  3.     int *a1 = new int(3);
  4.     cout << "a1 = " << a1 << endl;
  5.     //cout << "*a1 = " << *a1 << endl;
  6.     //cout << "&a1 = " << &a1 << endl;
  7.     //cout << "&(*a1) = " << &(*a1) << endl;

  8.     int *b1 = a1;
  9.     cout << "b1 = " << b1 << endl;
  10.     //cout << "*b1 = " << *b1 << endl;
  11.     //cout << "&b1 = " << &b1 << endl;
  12.     //cout << "&(*b1) = " << &(*b1) << endl;

  13.     delete a1;
  14.     a1 = nullptr;
  15.     cout << "*b1 = " << *b1 << endl;
  16.     return 0;
  17. }
复制代码
最佳答案
2021-5-8 16:19:51
因为这段内存空间还没有被其他程序使用,里面的内容当然没有改变了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-8 16:19:51 | 显示全部楼层    本楼为最佳答案   
因为这段内存空间还没有被其他程序使用,里面的内容当然没有改变了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-8 16:28:10 | 显示全部楼层
人造人 发表于 2021-5-8 16:19
因为这段内存空间还没有被其他程序使用,里面的内容当然没有改变了

这段内存空间被释放了,里面存储的内容不会被删除吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-8 18:32:17 | 显示全部楼层
清启牧 发表于 2021-5-8 16:28
这段内存空间被释放了,里面存储的内容不会被删除吗?

怎么删除?没办法删除的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 08:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表