delete(p)确实已经释放了p所指向的那块内存,但所谓释放并不是清空,而是把那块内存重新回收到系统中,告诉系统这块内存又可以重新分配了。可以参考格式化和低级格式化的操作效果。
正确的做法是delete完之后还应当将指针置空。
delete(p);
只表示p所指向的内存块的所有权,不归p所管了,但是内存里的值还在,
所以你delete完之后,取内存里的值,当然还在。
所以为什么内存释放之后一定要将指针置空,防止野指针出现
正确做法:
delete(p);
p = NULL;
如果类的对象里没有用new创建的数据成员,那么你就不需要担心类所占的空间 ,因为在这个对象的生命周期结束之后就会自己回收内存
如果是通过new那么 内存是在堆上分配 则使用delete删除类中的用new开辟的数据成员,其他的不用管,自动释放。
你已经取消了指针,但是指针指向的内存中的数据还在;
delete(p);和没写一样
直接p=NULL;就好了。