首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于delete的有关问题,求大神解惑!

2013-08-09 
关于delete的问题,求大神解惑!!!#include iostream using namespace stdint main(){int i0int *pnew

关于delete的问题,求大神解惑!!!


#include <iostream> 
using namespace std;
int main()
{
  int i=0;
  int *p=new int();
  int &j=*p;
  cout<<*p<<" "<<p<<" "<<j<<endl;
  delete p;
  //p=NULL;
  *p=3;
  cout<<*p<<" "<<p<<" "<<&j<<endl;
   return 0;
}

--------------
我对delete的理解是这样的,不知道对不对:
1、delete p; // 只是将p指向的对象的内容释放掉了(该int对象已经不存在),但是p本身还存着其以前指向对象的地址;此时p是悬垂指针;
2、//p=NULL; // 此时p本身存储的指向对象的地址已释放归零;
3、 *p=3; //该处赋值 将p指向的地址的内容设置为3;【该地址是存在的,但是不再是int对象的了】;

Q1:这里的delete p 之后,为什么还能进行*p=3 赋值操作?
Q2:为什么 j的地址与p是一样的呢?如果delete之后int对象已经释放了,这样的话j应该也释放了啊?为什么j所引用的对象还在呢?
--------------
真心求大神详解!
C++ delete
[解决办法]
Q1:这里的delete p 之后,为什么还能进行*p=3 赋值操作?

这个是没必要的(应该来说是错的),
只有中国应试教育才会这样做的吧!当你栈中空间不够用的时候,这个数据根本就得不到的

Q2:为什么 j的地址与p是一样的呢?如果delete之后int对象已经释放了,这样的话j应该也释放了啊?为什么j所引用的对象还在呢?


j是 *p的引用,两者就是同一个东西,地址肯定是一样的阿!
对象还在是应该,系统优化的,随便分配可一个空闲地址给他,才取到的值
当栈空间紧张的时候,就不会取到的,而且这样它的数据是危险的,

[解决办法]
比如说,你租了房子,不住的时候把房子退了`~
但是你没有把要是还完`自己手里还留了钥匙`~
你虽然退了房`你照样可以进那个房子`只不过违法了`算擅入民宅`非法了`~
你一样可以在里面存放和取用东西`~ 
[解决办法]
这个内存你可以用,但是却不是属于你的
[解决办法]
delete p;将p所指向的内容释放,让这一块内存能够被其他的代码访问,p本身并没有被销毁,p作为指针变量,而且是main函数中定义在,在main函数结束后才会释放,对p的操作都是合法的。
对于j,j定义的是p所指向的内容的引用,也就是说,int &j=*p;的意义相当于你先定义了一个 int j;
然后定义一个 int *p; *p=j;它们所实现的效果是一样的,p的值就是j的地址,你对&j的所有操作和操作p本身是一样的。区别就是,&j在程序运行时就确定了,不可变更,p是指针变量,p的值可以改变,*p的改变和j的改变在效果上是完全一样的。不知道够不够详细了 

热点排行