关于delete的有关问题,求大神解惑!
关于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的改变在效果上是完全一样的。不知道够不够详细了