delete一个指针之后,只是回收指针指向位置的空间,而指针本身的值不变。你需要手工将其赋值为NULL。
另外delete NULL的话不会有任何事情发生。
delete删除的只是该指针指向的内存,该指针变成一个野指针,需要重置为NULL。
不是 delete后就变成悬垂指针 就是没有用的指针了
最好自己将他指向NULL
如 delete p;
p = 0; // 0 == NULL
这样就安全了。
否则会产生不必要的后遗症(在大型程序里你就会懊恼了,当然这个我也不太懂了)
c++ 中delete一指针后,该指针为野指针。其值不变,还是指向原来的单元,但若访问这个单元,结果是无法预料的。
这书我看过了 C++沉思录 C++Primer 上面都提到智能指针 是这样的:U_Ptr这个类算是代理类吧(有时叫它句柄类 其实我也不知道为什么) 因为它有计数 计数的是有多少个对象是U_Ptr类代理的类(原始的) 每创建或者复制这种类型的对象 实际上在U_Ptr中的计数加1(有多少个原始的类类型的对象指向U_Ptr) 只有一个U_Ptr指向原始的类(或是别的) 注意:当U_Ptr中的计数为0时就是没有对象对向他 所以执行delete p 而代理类本身没有动态申请堆空间 释放的只是原始类(U_Ptr指向的)申请的空间 我觉得你没有弄清楚指针P和U_Ptr之间的区别
会的!P成为野指针 如果在访问P将出错 因为P指向的内存空间以不在 但P还是指向原来的地方啊…