在c++中 如: int *p = new int; int *temp = p; delete temp; 那么删除的是temp的内存还是p的内存..
3个回答
展开全部
指针p 占一个内存, 姑且叫 pX
指针temp,占一个内存, 姑且叫 tempX
p= new int. 表示, 把 px这个内存内容设置为 一个指针,内容是 (new int) 这个内容的指针, 它站内存位置比如是 intX.
那么, p 内存里它的值 就是intX 的地址,不是 intX的内容...
delete temp, 会把 指针tempX这个内容指向的地址, intX的这块内容擦出.
p 和temp 都指向 intX.
但是 intX 的内容已经被系统回收了...它, 不知道是什么了.
-.- 有些繁琐...
画图可能比较好理解.
代码 内存状态(k为int 的内存地址)
int *p = new int; p(k) (int)
int *temp = p; p(k) temp(k) (int)
delete temp; p(k) temp(k) -----
更多追问追答
追问
也就是只是存储内容内存的被删除,temp和p指针还在,可以继续进行如下行为:
比如:temp = new int 或p = new int;
还有什么办法能够验证这个机理.
追答
C被人诟病的就是指针的维护。
一般执行delete后立马吧指针指向Null。
但是,,,,有时候也不能指针满天还能清楚知道哪些正常。
所以有很多safeptr的类。其会管理对象的所有指针,修改其引用机制,确保目标销毁时,所有指针都能知道。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询